Ссылка на засчитанное решение.
Идея решения состоит в том, чтобы использовать 2 ассоциативных массива, один из которых хранит в качестве ключа и значения логин и пароль пользователь, а второй — логин и состояние (онлайн/оффлайн).
На С++ можно обойтись и одним ассоциативным массивом, если воспользоваться такой структурой: map<string, pair<string, bool> > m.
Код программы (http://ideone.com/3Uqhuh):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Map<String, String> m = new HashMap<String, String>(); Map<String, Boolean> u = new HashMap<String, Boolean>(); Scanner in = new Scanner(System.in); int n = in.nextInt(); String s; for(int i = 0; i < n; i++) { s = in.next(); if (s.equals("register")) { String a, b; a = in.next(); b = in.next(); if (m.containsKey(a)) { System.out.println("fail: user already exists"); } else { m.put(a, b); u.put(a, false); System.out.println("success: new user added"); } } else if (s.equals("login")) { String a, b; a = in.next(); b = in.next(); if (!m.containsKey(a)) { System.out.println("fail: no such user"); } else if (!b.equals(m.get(a))) { System.out.println("fail: incorrect password"); } else { if (u.get(a) == false) { u.put(a, true); System.out.println("success: user logged in"); } else { System.out.println("fail: already logged in"); } } } else { String a; a = in.next(); if (!m.containsKey(a)) { System.out.println("fail: no such user"); } else { if (u.get(a) == true) { u.put(a, false); System.out.println("success: user logged out"); } else { System.out.println("fail: already logged out"); } } } } } } |
А Вам не кажется, что ассоциативный массив Map<String, Boolean> u = new HashMap<String, Boolean>(); — это по сути не ассоциативный массив, а множество?
Написанное в рамках олимпиады, такое решение вполне подходит, а так, как минимум переменным m и u нужно дать более осмысленные имена. А по хорошему, a и b тоже.
Пока что, 17 баллов из 20.
Кстати, со ссылкой на timus получился курьез. Пройдя по Вашей ссылке засчитанное решение я неожиданно увидел свое решение этой задачи. Правильная ссылка такая засчитанное решение (с числовым идентификатором автора, а не author=me).