标签:
首先请允许我吐个槽。。。CCF的槽点简直太多了。。。以下就是我的分数。。。我对不起学了三年的所有编程老师。。。。
第一题不知道是因为看错题还是判错,签到题只对了10分。一般误判比较少,估计只能是我哪里理解错题意,因为第一题是送分的,所以真的真的很可惜。我姑且认为造成这个的而直接原因就是这个不像OJ一样可以实时查看提交结果,等到成绩下来已经晚了,这点就是CCF最不人性的地方。
后面第二题是一个简单的日历题目,刷刷刷10分钟解决战斗。
第三题是一个字符串替换题。题目看似不难,CCF所有的模拟类题目做起来都挺不简单,容易错还耗时,这道题我就做了2小时(渣,唉),考试时要有心理准备。字符串替换题我是错在了字符串不能递归替换这里,最后才发现这一点,但是时间已经来不及了,更何况牵一发而动全身,给80分还是很良心的。
第四题是考察图论,考的是有向图的强连通分量。这个还是看在前面有一点ACM基础,否则只按照学的准备应该覆盖不到这个范围。我当时写的时候是照着60%的用例写的程序,当然也出乎意料只对了30%的测试用例,具体原因就不知道了,因为后40%的用例确实比较大,得用优化但是看起来比较麻烦。
第五题因为时间就没仔细看了。。
周五还有最后的一次机会,但是还是需要准备的更充分一点。话说CCF的盲提交确实很烦,需要一再注意细节才可以,需要一再注意细节才可以,需要一再注意细节才可以!
1 #include <stdio.h> 2 #include <string.h> 3 #define LOCAL 4 struct mark { 5 char name; 6 int argu; 7 int taken; 8 char argustr[256]; 9 void print() { 10 if(taken==1) { 11 printf("-%c ",name); 12 if(argu==1) { 13 printf("%s ",argustr); 14 } 15 } 16 } 17 };//输入之后按照name排序 18 int hash[30]; 19 char markstr[54]; 20 mark markarr[30]; 21 int n; 22 char *delim = " "; 23 char rb; 24 int main() { 25 #ifdef LOCAL 26 freopen("data.in","r",stdin); 27 #endif 28 scanf("%s",markstr); 29 for(int i=0; i<30; i++) { 30 markarr[i].name=‘\0‘; 31 markarr[i].argu=0; 32 markarr[i].taken=0; 33 memset(markarr[i].argustr,‘\0‘,sizeof(markarr[i].argustr)); 34 } 35 int id=0; 36 for(int i=0; i<strlen(markstr); i++) { 37 markarr[id].name=markstr[i]; 38 if(i!=strlen(markstr)-1) { 39 if(markstr[i+1]==‘:‘) { 40 markarr[id].argu=1; 41 i++; 42 } 43 } 44 id++; 45 } 46 scanf("%d",&n); 47 char input[260]; 48 char *p; 49 for(int i=0; i<n; i++) { 50 51 for(int i=0; i<30; i++) { 52 markarr[i].name=‘\0‘; 53 markarr[i].argu=0; 54 markarr[i].taken=0; 55 memset(markarr[i].argustr,‘\0‘,sizeof(markarr[i].argustr)); 56 } 57 int id=0; 58 for(int i=0; i<strlen(markstr); i++) { 59 markarr[id].name=markstr[i]; 60 if(i!=strlen(markstr)-1) { 61 if(markstr[i+1]==‘:‘) { 62 markarr[id].argu=1; 63 i++; 64 } 65 } 66 id++; 67 } 68 printf("Case %d: ",i+1); 69 memset(hash,-1,sizeof(hash)); 70 scanf("%c",&rb); 71 scanf("%[^\n]",&input); 72 p=strtok(input, delim); 73 int bomb=0; 74 while((p = strtok(NULL, delim))) { 75 if(bomb==1) break; 76 //这里对其进行解析,遍历所有的看是否有匹配,如果有多进行一轮strtok 77 if(p[0]==‘-‘&&strlen(p)==2) { 78 int bomb2=0; 79 for(int j=0; j<id; j++) { 80 if(p[1]==markarr[j].name) { 81 //taken别忘了 82 if(markarr[j].argu==1) { 83 p = strtok(NULL, delim); 84 if(p==NULL) { //jmup to 下一行 ,异常处理就是设bomb, 85 bomb=1; 86 break; 87 } else { 88 strcpy(markarr[j].argustr,p); 89 markarr[j].taken=1; 90 hash[markarr[j].name-‘a‘]=j; 91 break; 92 } 93 } else { 94 markarr[j].taken=1; 95 hash[markarr[j].name-‘a‘]=j; 96 break; 97 } 98 } else { 99 bomb2++; 100 continue; 101 } 102 } 103 if(bomb2==id) { 104 bomb=1; 105 break; 106 } 107 } else { 108 //其他的选项的话(第一个出现bomb,第二个出现的情况也不可能,也是bomb) 109 bomb=1; 110 break; 111 } 112 113 } 114 //output,首先排序?hash 115 for(int k=0; k<26; k++) { 116 if(hash[k]!=-1) { 117 markarr[hash[k]].print(); 118 } 119 } 120 printf("\n"); 121 } 122 123 return 0; 124 }
标签:
原文地址:http://www.cnblogs.com/windcarp/p/4810930.html