Условие и начальные данные можно посмотреть по ссылке.
Тест:
исходные данные | результат |
6 | |
register alena 223344 | success: new user added |
login alena 223 | fail: incorrect password |
login alena 223344 | success: user logged in |
login john 454545 | fail: no such user |
logout alena | success: user logged out |
logout alena | fail: already logged out |
Решение:
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 66 67 68 69 70 71 72 73 74 75 |
import java.util.*; import java.lang.*; import java.io.*; public class Main { public static String register(String username, String password, HashMap< String, String> usersAndPasswords) { //проверяем, есть ли такой пользователь if(usersAndPasswords.containsKey(username)){ //если есть, то мы не можем добавить нового с таким же именем return "fail: user already exists"; } else { //если нет, то добавляем нового пользователя usersAndPasswords.put(username, password); return "success: new user added"; } } public static String login(String username, String password, HashMap< String, String> usersAndPasswords, HashMap< String, Integer> loggedInUsers) { //проверяем, зарегистрирован ли такой пользователь if(usersAndPasswords.containsKey(username)){ //проверяем, совпадает ли зарегистрированный пароль с введенным паролем if (usersAndPasswords.get(username).equals(password)){ //проверяем, есть ли такой пользователь в списке вошедших пользователей if(loggedInUsers.containsKey(username)) { return "fail: already logged in"; } else { loggedInUsers.put(username,1); return "success: user logged in"; } } else return "fail: incorrect password"; } else return "fail: no such user"; } public static String logout(String username, HashMap< String, String> usersAndPasswords, HashMap< String, Integer> loggedInUsers) { //проверяем, зарегистрирован ли такой пользователь if(usersAndPasswords.containsKey(username)){ //проверяем, есть ли пользователь в списке вошедших if(loggedInUsers.containsKey(username)) { //если есть, то удаляем его loggedInUsers.remove(username); return "success: user logged out"; } else return "fail: already logged out"; } else return "fail: no such user"; } public static void main (String[] args) { Scanner sc = new Scanner(System.in); int n; n = sc.nextInt(); //список зарегистрированных пользователей и их пароли HashMap< String, String> usersAndPasswords = new HashMap< String, String>(); //список вошедших пользователей HashMap< String, Integer> loggedInUsers = new HashMap< String, Integer>(); String command; String username; String password; for(int i = 0; i < n; i++) { command = sc.next(); if(command.equals("register")) { username = sc.next(); password = sc.next(); System.out.println(register(username, password, usersAndPasswords)); } else if(command.equals("login")){ username = sc.next(); password = sc.next(); System.out.println(login(username, password, usersAndPasswords, loggedInUsers)); } else if(command.equals("logout")){ username = sc.next(); System.out.println(logout(username, usersAndPasswords, loggedInUsers)); } } } } |
Для решения этой задачи я использовала два ассоциативных массива. Первый (usersAndPasswords) хранит в качестве ключа имя зарегистрированного пользователя, а в качестве значения — пароль этого пользователя; второй (loggedInUsers) хранит вошедших на форум пользователей, а в качестве значения всегда единица, потому что мы никак не используем значение, нам важно только есть ли имя пользователя в этом массиве или нет.
Когда пользователь входит на форум мы добавляем его имя как ключ в массив loggedInUsers. А когда он выходит мы удаляем его из этого массива. Для проверки есть ли пользователь на форуме или он уже вышел, мы проверяем есть ли он в массиве loggedInUsers или нету.
Ссылка на решение на ideone.
Ссылка на засчитанное решение на http://acm.timus.ru/.