zoj1610 Count the Colors
1 #include<stdio.h> 2 #include<string.h> 3 #define N 8001 4 int color[N],cnt[N];//这个cnt是用来记录颜色i出现的段数 ,注意cnt里的这个N真的需要好大,我以为就几百种呢,结果WA好多次 5 int main() 6 { 7 int i,j,a,b,c,max,n; 8 while(~scanf("%d",&n)){ 9 for(max=i=0;i<n;++i){ 10 scanf("%d%d%d",&a,&b,&c); 11 for(j=a;j<b;++j) 12 color[j]=c+1; 13 if(max<b) max=b; 14 } 15 for(i=0;i<max;++i){ 16 while(i!=0&&color[i]&&color[i]==color[i-1]) //假如颜色不为空且与前一段相同,则继续读下一段 17 ++i; 18 if(color[i]) 19 cnt[color[i]-1]++; //颜色为color[i]-1的段数加一 20 } 21 for(i=0;i<N;++i) 22 if(cnt[i]) printf("%d %d\n",i,cnt[i]);//从小到大输出颜色及出现次数 23 memset(color,0,max*sizeof(int));//记得清空 24 memset(cnt,0,sizeof(cnt)); 25 putchar('\n'); 26 } 27 return 0; 28 }