Untitled
unknown
plain_text
2 years ago
5.8 kB
7
Indexable
#include <stdio.h> #include <string.h> typedef enum { CMD_INIT, CMD_ADD, CMD_DELETE, CMD_CHANGE, CMD_SEARCH } COMMAND; typedef enum { NAME, NUMBER, BIRTHDAY, EMAIL, MEMO } FIELD; typedef struct { int count; char str[20]; } RESULT; //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// extern void InitDB(); extern void Add(char* name, char* number, char* birthday, char* email, char* memo); extern int Delete(FIELD field, char* str); extern int Change(FIELD field, char* str, FIELD changefield, char* changestr); extern RESULT Search(FIELD field, char* str, FIELD returnfield); //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// static int dummy[100]; static int Score, ScoreIdx; static char name[20], number[20], birthday[20], email[20], memo[20]; static char lastname[10][5] = { "kim", "lee", "park", "choi", "jung", "kang", "cho", "oh", "jang", "lim" }; static int lastname_length[10] = { 3, 3, 4, 4, 4, 4, 3, 2, 4, 3 }; static int mSeed; static int mrand(int num) { mSeed = mSeed * 1103515245 + 37209; if (mSeed < 0) mSeed *= -1; return ((mSeed >> 8) % num); } static void make_field(int seed) { int name_length, email_length, memo_length; int idx, num; mSeed = (unsigned int)seed; name_length = 6 + mrand(10); email_length = 10 + mrand(10); memo_length = 5 + mrand(10); num = mrand(10); for (idx = 0; idx < lastname_length[num]; idx++) name[idx] = lastname[num][idx]; for (; idx < name_length; idx++) name[idx] = 'a' + mrand(26); name[idx] = 0; for (idx = 0; idx < memo_length; idx++) memo[idx] = 'a' + mrand(26); memo[idx] = 0; for (idx = 0; idx < email_length - 6; idx++) email[idx] = 'a' + mrand(26); email[idx++] = '@'; email[idx++] = 'a' + mrand(26); email[idx++] = '.'; email[idx++] = 'c'; email[idx++] = 'o'; email[idx++] = 'm'; email[idx] = 0; idx = 0; number[idx++] = '0'; number[idx++] = '1'; number[idx++] = '0'; for (; idx < 11; idx++) number[idx] = '0' + mrand(10); number[idx] = 0; idx = 0; birthday[idx++] = '1'; birthday[idx++] = '9'; num = mrand(100); birthday[idx++] = '0' + num / 10; birthday[idx++] = '0' + num % 10; num = 1 + mrand(12); birthday[idx++] = '0' + num / 10; birthday[idx++] = '0' + num % 10; num = 1 + mrand(30); birthday[idx++] = '0' + num / 10; birthday[idx++] = '0' + num % 10; birthday[idx] = 0; } static void cmd_init() { scanf("%d", &ScoreIdx); InitDB(); } static void cmd_add() { int seed; scanf("%d", &seed); make_field(seed); Add(name, number, birthday, email, memo); } static void cmd_delete() { int field, check, result; char str[20]; scanf("%d %s %d", &field, str, &check); result = Delete((FIELD)field, str); if (result != check) Score -= ScoreIdx; } static void cmd_change() { int field, changefield, check, result; char str[20], changestr[20]; scanf("%d %s %d %s %d", &field, str, &changefield, changestr, &check); result = Change((FIELD)field, str, (FIELD)changefield, changestr); if (result != check) Score -= ScoreIdx; } static void cmd_search() { int field, returnfield, check; char str[20], checkstr[20]; scanf("%d %s %d %s %d", &field, str, &returnfield, checkstr, &check); RESULT result = Search((FIELD)field, str, (FIELD)returnfield); if (result.count != check || (result.count == 1 && (strcmp(checkstr, result.str) != 0))) Score -= ScoreIdx; } static void run() { int N; scanf("%d", &N); for (int i = 0; i < N; i++) { int cmd; scanf("%d", &cmd); switch (cmd) { case CMD_INIT: cmd_init(); break; case CMD_ADD: cmd_add(); break; case CMD_DELETE: cmd_delete(); break; case CMD_CHANGE: cmd_change(); break; case CMD_SEARCH: cmd_search(); break; default: break; } } } static void init() { Score = 1000; ScoreIdx = 1; } int main() { int T; scanf("%d", &T); int TotalScore = 0; for (int tc = 1; tc <= T; tc++) { init(); run(); if (Score < 0) Score = 0; TotalScore += Score; printf("#%d %d\n", tc, Score); } printf("TotalScore = %d\n", TotalScore); return 0; } #include <unordered_map> #include <list> #include <string> using namespace std; typedef enum { NAME, NUMBER, BIRTHDAY, EMAIL, MEMO } FIELD; typedef struct { int count; char str[20]; } RESULT; #define FIELDS 5 #define LENGTH 20 int cnt; struct person{ string infor[6]; bool invalid; } Person[500002]; unordered_map<string, list<person>> mp[FIELDS]; void InitDB() { cnt = 0; for(int i = 0; i < 5; i++) { mp[i].clear(); } } void Add(char* name, char* number, char* birthday, char* email, char* memo) { cnt++; Person[cnt].infor[1] = name; Person[cnt].infor[2] = number; Person[cnt].infor[3] = birthday; Person[cnt].infor[4] = email; Person[cnt].infor[5] = memo; Person[cnt].invalid = false; mp[NAME][name].push_back(Person[cnt]); mp[NUMBER][number].push_back(Person[cnt]); mp[BIRTHDAY][birthday].push_back(Person[cnt]); mp[EMAIL][email].push_back(Person[cnt]); mp[MEMO][memo].push_back(Person[cnt]); } int Delete(FIELD field, char* str) { int count = 0; list<person> per = mp[field][str]; for(int x = 0; x < per.size(); x++) { } return 0; } int Change(FIELD field, char* str, FIELD changefield, char* changestr) { return 0; } RESULT Search(FIELD field, char* str, FIELD returnfield) { RESULT res; return res; }
Editor is loading...