正式集训第一天就是这么带劲。。。先是做杭电上的1个比赛,其实7个都算是自己做的。。。。这不由让我起了复制粘贴的歹心,有些模版还是再敲了一遍,然后就来到了一个以前见过N次,却不屑去做的一个题。。。
HDU 1106 排序 其实就 3个trick 一开始是5 连续的5 结尾没有5。。。。然后各种改。。。各种交,WA6次之后终于A了。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 __int64 p[100001]; 5 char str[1000001]; 6 int cmp(void const *a,void const *b) 7 { 8 return *(__int64 *)a>*(__int64 *)b ? 1:-1; 9 } 10 int main() 11 { 12 __int64 i,j,k,start,len,a; 13 while(scanf("%s",str)!=EOF) 14 { 15 memset(p,0,sizeof(p)); 16 j = 0; 17 for(i = 0; i <= len-1; i ++) 18 { 19 if(str[i] != '5') 20 { 21 start = i; 22 break; 23 } 24 } 25 len = strlen(str); 26 for(i = start; i <= len-1; i ++) 27 { 28 if(str[i] == '5'&&str[i-1] != '5') 29 { 30 a = 1; 31 for(k = i-1; k >= start; k --) 32 { 33 p[j] += a*(str[k]-'0'); 34 a = a*10; 35 } 36 start = i+1; 37 j ++; 38 } 39 else if(str[i] == '5'&&str[i-1] == '5') 40 { 41 start = i+1; 42 } 43 } 44 if(str[len-1] != '5') 45 { 46 a = 1; 47 for(k = i-1; k >= start; k --) 48 { 49 p[j] += a*(str[k]-'0'); 50 a = a*10; 51 } 52 start = i+1; 53 j ++; 54 } 55 qsort(p,j,sizeof(p[0]),cmp); 56 for(i = 0; i <= j-1; i ++) 57 { 58 if(i == 0) 59 printf("%I64d",p[i]); 60 else 61 printf(" %I64d",p[i]); 62 } 63 printf("\n"); 64 } 65 return 0; 66 }
然后表示 目测 还有俩,一个线段树模版题,一个数论题,没啥想法。。。。
12点多校第一场,我们队 RP大爆发。。。说一下过程,由于隔得较远,QQ交流的多一点,而且人手一台电脑。我看中间4个题,发现E题看懂,DFS,开始了悲剧了1个多小时,然后看看排名,没几个过了,放弃了。。。。看到H,貌似可以做,但又没想法。这时我们过了3个了吧,然后看到了K题BFS,我说,我写把,找出以前打循环矩阵的模版,又搞了1+小时,过了样例,然后3个人讨论。。。这个题陷阱好多啊,然后发现要用很大的棋盘,终于胡改了几次,出现了RE,然后把队列改大一点,本来想会不会超时的,结果神奇的AC了。。。然后和他们讨论了会别的题,然后看看H,这个做出的人100+我感觉是DP,结果果真是。。。自己不怎么的 就想了个O(n^2)的做法,在4个多小时的才想出来。。。。不过还好,代码短,不用怎么调试,交上本以为会TLE,N有10的5次方,WA了,队友差个错,0的时候没考虑,改改,交错了个题。。。而且更搞笑的是最后那个题也过了,交上居然也A了。。。哎,就这样水过了这个,最后由把公式概率那个题,QC给试出来了。。感觉有点超长发挥了。。。人品爆发。。。
水过的H题 HDU 4252
#include <stdio.h> #include <string.h> #define N 100001 int p[N]; int main() { int i,j,n,num = 0,min; while(scanf("%d",&n)!=EOF) { min = 0; num ++; for(i = 1; i <= n; i ++) scanf("%d",&p[i]); if(p[1] == 0) min ++; for(i = 2; i <= n; i ++) { if(p[i] == 0) min++; else { for(j = i-1; j >= 1; j--) { if(p[j] < p[i]) break; else if(p[j] == p[i]&&p[i] != 0) { min++; break; } } } } printf("Case %d: ",num); printf("%d\n",n-min); } return 0; }
搞的纠结6Y的K题。 HDU4255
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define N 288*288 5 int o[90001],key[90001]; 6 int p[301][301]; 7 int r[90001],cc[90001]; 8 int main() 9 { 10 int a,b,c,d,e,i,f,j,k; 11 int x,y,start,end,num,z,st,ai,endr,endc,t; 12 int wx[4] = {0,0,-1,1}; 13 int wy[4] = {1,-1,0,0}; 14 a = 288; 15 d = N; 16 memset(o,0,sizeof(o)); 17 if(a%2==0) 18 b=a/2; 19 else 20 b=(a+1)/2; 21 for(c=1; c<=b; c++) 22 { 23 e=c; 24 for(f=c; f<=a-c; f++) 25 p[e][f]=d--; 26 f=a-c+1; 27 for(e=c; e<=a-c; e++) 28 p[e][f]=d--; 29 e=a-c+1; 30 for(f=a-c+1; f>c; f--) 31 p[e][f]=d--; 32 f=c; 33 for(e=a-c+1; e>c; e--) 34 p[e][f]=d--; 35 } 36 if(a%2==1) 37 p[a/2+1][a/2+1]=1; 38 o[1] = 1; 39 for(i = 2; i <= sqrt(N); i ++) 40 { 41 if(!o[i]) 42 { 43 for(j = i+i; j <= N; j += i) 44 { 45 o[j] = 1; 46 } 47 } 48 } 49 /* for(i = 1;i <= 100;i ++) 50 { 51 if(!o[i]) 52 printf("%d ",i); 53 }*/ 54 a = 0; 55 while(scanf("%d%d",&st,&ai)!=EOF) 56 { 57 a ++; 58 memset(key,0,sizeof(key)); 59 for(i = 1; i <= 288; i ++) 60 for(j = 1; j <= 288; j ++) 61 { 62 if(p[i][j] == st) 63 { 64 x = i; 65 y = j; 66 } 67 else if(p[i][j] == ai) 68 { 69 endr = i; 70 endc = j; 71 } 72 } 73 start = end = 1; 74 r[1] = x; 75 cc[1] = y; 76 z = 0; 77 num = 0; 78 key[st] = 1; 79 /* printf("%d %d %d %d\n",x,y,endr,endc);*/ 80 while(start <= end) 81 { 82 if(key[ai]) 83 { 84 z = 1; 85 break; 86 } 87 j = 1; 88 for(i = start; i <= end; i ++) 89 { 90 for(k = 0; k <= 3; k ++) 91 { 92 if(r[i]+wx[k] >= 1&&r[i]+wx[k]<=288&&cc[i]+wy[k]>=1&&cc[i]+wy[k]<=288) 93 { 94 t = p[r[i]+wx[k]][cc[i]+wy[k]]; 95 if(o[t]&&!key[t]) 96 { 97 key[t] = 1; 98 r[end+j] = r[i]+wx[k]; 99 cc[end+j] = cc[i]+wy[k]; 100 j ++; 101 } 102 else if(t == ai) 103 { 104 key[ai] = 1; 105 } 106 } 107 } 108 } 109 start = end+1; 110 end = end +j-1; 111 num++; 112 } 113 printf("Case %d: ",a); 114 if(!z) 115 printf("impossible\n"); 116 else 117 printf("%d\n",num); 118 } 119 return 0; 120 }