Untitled
unknown
plain_text
a year ago
5.1 kB
9
Indexable
#include <iostream>
using namespace std;
#include <vector>
#include <string>
#include <unordered_map>
#include <set>
const int MAX_LEN = 200005;
const int MAX_ARRAY = 12;
typedef struct nodeName{
int value;
int id, index;
struct nodeName *next;
nodeName(int _id, int _index, int _value) {
id = _id;
index = _index;
value = _value;
}
}nodeName;
unordered_map<string, nodeName*> hashName;
int len_array; //so luong mang
int arr[MAX_ARRAY][MAX_LEN];
void init()
{
hashName.clear();
len_array = 0;
}
void makeList(char mName[], int mLength, int mListValue[])
{
string name = mName;
nodeName *node = new nodeName(len_array, -1, 0);
node->next = NULL;
for(int i=0; i<mLength; i++){
arr[len_array][i] = mListValue[i];
}
hashName[name] = node;
len_array++;
}
void copyList(char mDest[], char mSrc[], bool mCopy)
{
string source = mSrc;
string dest = mDest;
nodeName *node = hashName[source];
if(mCopy == true){ //copy value
nodeName *newNode = new nodeName(node->id, -1, 0);
newNode->next = NULL;
newNode->next = node->next;
hashName[dest] = newNode;
}
else{ //copy address
hashName[dest] = node;
}
}
void updateElement(char mName[], int mIndex, int mValue)
{
string name = mName;
nodeName *node = hashName[name];
nodeName *newNode = new nodeName(node->id, mIndex, mValue);
newNode->next = node->next;
node->next = newNode;
}
int element(char mName[], int mIndex)
{
string name = mName;
nodeName *node = hashName[name];
nodeName *temp = node;
while (temp != NULL) {
if (temp->index == mIndex) {
return temp->value;
}
temp = temp->next;
}
return arr[node->id][mIndex];
}
//
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#define CMD_INIT 100
#define CMD_MAKE_LIST 200
#define CMD_COPY_LIST 300
#define CMD_UNDATE_ELEMENT 400
#define CMD_ELEMENT 500
extern void init();
extern void makeList(char mName[], int mLength, int mListValue[]);
extern void copyList(char mDest[], char mSrc[], bool mCopy);
extern void updateElement(char mName[], int mIndex, int mValue);
extern int element(char mName[], int mIndex);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
static unsigned int mSeed;
static unsigned int pseudo_rand(void)
{
mSeed = mSeed * 214013 + 2531011;
return (mSeed >> 16) & 0x7FFF;
}
static char mName[21];
static char mDest[21];
static char mSrc[21];
static int mListValue[200000];
static void generateName(char *name, int seed)
{
mSeed = seed;
int name_len = pseudo_rand() % 20 + 1;
for (int i = 0; i < name_len; ++i)
{
name[i] = pseudo_rand() % 26 + 'a';
}
name[name_len] = '\0';
}
static int generateList(int *listValue, int seed)
{
mSeed = seed;
int length = pseudo_rand() << 15;
length = (length + pseudo_rand()) % 200000 + 1;
for (int i = 0; i < length; ++i)
{
listValue[i] = pseudo_rand();
}
return length;
}
static bool run()
{
int numQuery;
int seed;
int mIndex, mValue, mCopy, mLength;
int userAns, ans;
bool isCorrect = false;
scanf("%d", &numQuery);
for (int i = 0; i < numQuery; ++i)
{
int cmd;
scanf("%d", &cmd);
switch (cmd)
{
case CMD_INIT:
init();
isCorrect = true;
break;
case CMD_MAKE_LIST:
scanf("%d", &seed);
generateName(mName, seed);
scanf("%d", &seed);
mLength = generateList(mListValue, seed);
makeList(mName, mLength, mListValue);
break;
case CMD_COPY_LIST:
scanf("%d", &seed);
generateName(mDest, seed);
scanf("%d", &seed);
generateName(mSrc, seed);
scanf("%d", &mCopy);
copyList(mDest, mSrc, (mCopy != 0));
break;
case CMD_UNDATE_ELEMENT:
scanf("%d", &seed);
generateName(mName, seed);
scanf("%d %d", &mIndex, &mValue);
updateElement(mName, mIndex, mValue);
break;
case CMD_ELEMENT:
scanf("%d", &seed);
generateName(mName, seed);
scanf("%d", &mIndex);
userAns = element(mName, mIndex);
scanf("%d", &ans);
if (userAns != ans)
{
isCorrect = false;
}
break;
default:
isCorrect = false;
break;
}
}
return isCorrect;
}
int main()
{
setbuf(stdout, NULL);
freopen("input.txt", "r", stdin);
int T, MARK;
scanf("%d %d", &T, &MARK);
for (int tc = 1; tc <= T; tc++)
{
int score = run() ? MARK : 0;
printf("#%d %d\n", tc, score);
}
return 0;
}Editor is loading...
Leave a Comment