Ссылка на засчитанное решение.
Идея решения состоит в том, чтобы использовать 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"); } } } } } } |