2014牡丹江现场-H-大模拟

大模拟

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4 #include <string>
  5 #include <vector>
  6 #include <map>
  7
  8 using namespace std;
  9
 10 const int maxn = 1e7+10;
 11 const int max_node = 1e5+10;
 12
 13 int T,N,len;
 14 char line[maxn];
 15 char text[maxn];
 16
 17 struct node
 18 {
 19     string contain;
 20     int kind;
 21     int sons;
 22     map<string,int> key;
 23     map<string,int> nxt;
 24     vector <pair<int,int> > val;
 25 }json[max_node];
 26
 27 int n_eon = 0;
 28
 29 pair<int,int> dfs(int pos,int fa)
 30 {
 31     json[++n_eon].kind = 0;
 32     json[n_eon].key.clear();
 33     json[n_eon].val.clear();
 34     json[n_eon].nxt.clear();
 35
 36     int cur_eon = n_eon;
 37
 38     //printf("%s\n",text+pos);
 39     bool flag_key = false;
 40
 41     string val;
 42     string key;
 43
 44     while(pos < len)
 45     {
 46         if(text[pos] == ‘{‘ && flag_key)
 47         {
 48             pair<int,int> tmp = dfs(pos+1,n_eon);
 49             int n_pos = tmp.first;
 50             pair<int,int> pr;
 51             pr.first = pos;
 52             pr.second = n_pos;
 53             //val.clear();
 54             //for(int i=pos;i<n_pos;i++)
 55             //{
 56             //    val += text[i];
 57             //}
 58
 59             pos = n_pos;
 60             flag_key = false;
 61             //printf("02:get val %s\n",val.c_str());
 62             json[cur_eon].val.push_back(pr);
 63             json[cur_eon].nxt.insert(pair<string,int>(key,tmp.second));
 64         }
 65         else if(text[pos] == ‘}‘)
 66         {
 67             return pair<int,int>(pos+1,cur_eon);
 68         }
 69         else if(text[pos] == ‘"‘)
 70         {
 71             if(flag_key == false)
 72             {
 73                 key.clear();
 74                 while(++pos < len && text[pos] != ‘"‘)
 75                 {
 76                     key += text[pos];
 77                 }
 78                 pos++;
 79                 //printf("get key %s cur:%d \n",key.c_str(),cur_eon);
 80                 json[cur_eon].key.insert(pair<string,int>(key,json[cur_eon].val.size()));
 81                 flag_key = true;
 82             }
 83             else
 84             {
 85                 pair<int,int> pr;
 86                 pr.first = pos;
 87                 //val.clear();
 88                 //val+=‘"‘;
 89
 90                 while(++pos < len && text[pos] != ‘"‘)
 91                 {
 92                     //val += text[pos];
 93                 }
 94
 95                 //val+=‘"‘;
 96                 pr.second = ++pos;
 97                 //pos++;
 98                 //printf("01:get val %s cur:%d siz:%d\n",val.c_str(),cur_eon,json[cur_eon].val.size());
 99                 json[cur_eon].val.push_back(pr);
100                 flag_key = false;
101             }
102         }
103         else if(text[pos] == ‘:‘)
104         {
105             if(flag_key)
106             {
107
108             }
109             else
110             {
111                 //printf("Error! no key\n");
112             }
113             pos++;
114         }
115         else if(text[pos] == ‘,‘)
116         {
117             pos++;
118         }
119         //pos++;
120     }
121 }
122
123 char op[maxn];
124 int main()
125 {
126     //freopen("input.txt","r",stdin);
127     //freopen("output.txt","w",stdout);
128     scanf("%d ",&T);
129     while(T--)
130     {
131         n_eon = 0;
132         gets(line);
133         len = strlen(line);
134         int cnt = 0;
135         for(int i=0;i<len;i++)
136         {
137             if(line[i] == ‘ ‘) continue;
138             else text[cnt++] = line[i];
139         }
140         text[cnt] = 0;
141
142         len = cnt;
143         dfs(1,0);
144         //printf("load!\n");
145         scanf("%d ",&N);
146         for(int i=0;i<N;i++)
147         {
148             //printf("N:%d i:%d\n",N,i);
149             gets(op);
150             int l = strlen(op),pos = 0;
151             int cur = 1;
152             //printf("q:%s\n",op);
153             while(pos < l)
154             {
155                 if(op[pos] == ‘"‘)
156                 {
157                     string key;
158                     while(++pos < l && op[pos] != ‘"‘)
159                     {
160                         key += op[pos];
161                     }
162                     //printf("query: %s\n",key.c_str());
163                     pos++;
164                     if(json[cur].key.count(key) != 0)
165                     {
166                         if(op[pos] == ‘.‘ && json[cur].nxt.count(key) != 0)
167                         {
168                             cur = json[cur].nxt[key];
169                             pos++;
170                             continue;
171                         }
172                         if(op[pos] == 0)
173                         {
174                             //printf("cur:%d get: %d num:%d\n",cur,json[cur].key[key],json[cur].val.size());
175                             //printf("%s\n",json[cur].val[ json[cur].key[key] ].c_str());
176                             pair<int,int> tp = json[cur].val[ json[cur].key[key] ];
177                             for(int i=tp.first; i < tp.second ; i++)
178                             {
179                                 putchar(text[i]);
180                             }
181                             puts("");
182                             break;
183                         }
184                         else
185                         {
186                             printf("Error!\n");
187                             break;
188                         }
189                     }
190                     else
191                     {
192                         printf("Error!\n");
193                         break;
194                     }
195                 }
196             }
197         }
198     }
199 }
时间: 2024-09-30 18:36:12

2014牡丹江现场-H-大模拟的相关文章

2014 牡丹江现场赛 A.Average Score(zoj 3819) 解题报告

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 题目意思: 有两个class:A 和 B,Bob 在 Class A 里面.现在给出 Class A(n-1人) 和 Class B(m人) 所有人的分数,除了Bob,所以Class A 少了一个人.现在需要找出 Bob 最大可能的分数和最少可能的分数,使得他在Class A 里面拉低平均分,而在Class B 里面提高平均分. 由于数据量不大,所以可以暴力枚

2014牡丹江 现场赛 F zoj 3824 Fiber-optic Network

首先赞一下题目, 好题 题意: Marjar University has decided to upgrade the infrastructure of school intranet by using fiber-optic technology. There are N buildings in the school. Each building will be installed with one router. These routers are connected by optic

2014 牡丹江赛区总结

随着上海赛区比赛的结束,2014赛季也告一段落了.是时候总结一下.. 从网络赛开始..就深感到自己实力的不足,除了牡丹江网络赛中出了一道搜索+剪枝之外,似乎我就没有做出什么贡献..总是冒充Java专业选手写写高精度..上网百度模板什么的..尝试开了几次大模拟或者复杂搜索也没能够现场做出来.总之就是感觉自己能力十分不足. 然后我,Wzy,1243France作为2014年AHU的首发去了牡丹江.牡丹江基本上是被看做最弱的赛区吧.所以教练放心大胆的让我们三个13级的去,虽然结果是很遗憾的.我们到牡丹

ACM-ICPC 2014北京邀请赛 H Happy Reverse [模拟]

题意:给出n个二进制串,可以把其中的一些0和1反转(即0变1,1变0),找出转化后n个串中的最大值和最小值的差值. 分析:思路就是把所有的串和反转的存在一个数组中,然后排序,找最大值和最小值的差,(如果是同一个串反转的就找第二大的和最小的或第二小和最大的中的最大值).注意假如只有一个串的话结果为0 DEBUG: 这题写了好久 1.第一次用vim,很爽,但是还没熟练 2.忽视了这题的范围,显然要用longlong 3.用了longlong后还WA,用脚本跑出来数据发现在longlong下,min的

HDU 5131 Song Jiang&#39;s rank list (结构体+MAP,2014广州现场赛)

题目链接:HDU 5131 Song Jiang's rank list 题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个数加1,(也就是杀敌数相等,但是字典序比他小的人数加1). AC代码: #include <stdio.h> #include <string> #include <map> #include <

HDU 5131 Little Zu Chongzhi&#39;s Triangles (状压DP +2014广州现场赛)

题目链接:HDU 5131 Little Zu Chongzhi's Triangles 题意:给出一些线段,在其中选出3根组成三角形,问用这些线段组成的所有三角形的最大面积是多少. 7 3 4 5 3 4 5 90 两个三角形是(3,3,4),(5,5,4). 思路:N最大12,状态压缩,把所有可能组成的三角形存起来.A&B==0则说明A|B状态是有效的. 贪心也能过..为什么? AC代码: #include <stdio.h> #include <string.h> #

大模拟祭

考试的前一天晚上我还在和$letong$说,我以后晚上再颓就去打模拟,然后就考了个大模拟 我比较$sb$,各种情况全分开了,没怎么压行,打了$1000$行整,$30$多$k$,妈妈再也不怕我打不出来猪国杀了 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int n,len,Std; 6 int b[5]; 7 char s[20],ss[20];

AC日记——神奇的幻方 洛谷 P2615(大模拟)

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

URAL 1715. Another Ball Killer (大模拟)

1715. Another Ball Killer Time limit: 2.0 second Memory limit: 64 MB Contestants often wonder what jury members do during a contest. Someone thinks that they spend all the contest fixing bugs in tests. Others say that the jury members watch the conte