Untitled
unknown
plain_text
2 years ago
5.8 kB
11
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...