| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:请问为什么此程序sample过了,但提交re?(内有代码)好心人帮忙看看..谢谢..希望frkstyc能来:)In Reply To:请问为什么此程序sample过了,但提交re?(内有代码)好心人帮忙看看..谢谢..希望frkstyc能来:) Posted by:wronger at 2006-09-24 20:32:51 > #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
>
> int width, leng, *pre, *now, *next;
>
> int getvalue(int m){
> int max=0;
> if(m>0){
> if(abs(pre[m-1]-now[m])>max) max=abs(pre[m-1]-now[m]);
> if(abs(now[m-1]-now[m])>max) max=abs(now[m-1]-now[m]);
> if(abs(next[m-1]-now[m])>max) max=abs(next[m-1]-now[m]);
> }
> if(m<width-1){
> if(abs(pre[m+1]-now[m])>max) max=abs(pre[m+1]-now[m]);
> if(abs(now[m+1]-now[m])>max) max=abs(now[m+1]-now[m]);
> if(abs(next[m+1]-now[m])>max) max=abs(next[m+1]-now[m]);
> }
> if(abs(pre[m]-now[m])>max) max=abs(pre[m]-now[m]);
> if(abs(now[m]-now[m])>max) max=abs(now[m]-now[m]);
> if(abs(next[m]-now[m])>max) max=abs(next[m]-now[m]);
> return max;
> }
>
> typedef struct{
> int value, num;
> } pair;
>
> int main(){
> int i, j, v, x, y, an, *d, *b, *c, mid, k, zeron, flag, *tem;
> pair a[1000], r;
> while(scanf("%d", &width)){
> if(width==0){
> printf("0\n");
> break;
> }
> an=0; leng=0;
> while(scanf("%d%d", &x, &y)){
> if(x==0 && y==0) break;
> a[an].value=x;
> a[an++].num=y;
> leng+=y;
> }
> leng=leng/width;
> d=(int*)malloc(width*sizeof(int));
> b=(int*)malloc(width*sizeof(int));
> c=(int*)malloc(width*sizeof(int));
> pre=d; now=b; next=c;
> mid=0;
> k=0;
> i=0;
> while(i<an){
> if(a[i].num>width-k){
> a[i].num-=width-k;
> while(k<width){
> pre[k]=now[k]=a[i].value;
> k++;
> }
> break;
> }
> else{
> while(a[i].num--){
> pre[k]=now[k]=a[i].value;
> k++;
> }
> i++;
> }
> }
> flag=0; r.value=-1;
> printf("%d\n", width);
> while(1){
> if(mid==leng-1){
> for(j=0; j<width; j++)
> next[j]=now[j];
> }else{
> k=0;
> while(i<an){
> if(a[i].num>width-k){
> if(k==0 && a[i].num/width>2){
> flag=1;
> zeron=(a[i].num/width-2)*width;
> a[i].num-=zeron;
> mid+=zeron/width;
> }
> a[i].num-=width-k;
> while(k<width){
> next[k]=a[i].value;
> k++;
> }
> break;
> }
> else{
> while(a[i].num--){
> next[k]=a[i].value;
> k++;
> }
> i++;
> }
> }
> }
> for(j=0; j<width; j++){
> v=getvalue(j);
> if(r.value==-1){
> r.num=1;
> r.value=v;
> }
> else if(v==r.value) r.num++;
> else{
> printf("%d %d\n", r.value, r.num);
> r.num=1;
> r.value=v;
> }
> }
> if(flag==1) flag++;
> else if(flag==2){
> if(r.value==0) r.num+=zeron;
> else{
> printf("%d %d\n", r.value, r.num);
> r.value=0;
> r.num=zeron;
> }
> flag=0;
> }
> mid++;
> if(mid==leng) break;
> tem=pre; pre=now; now=next; next=tem;
> }
> printf("%d %d\n", r.value, r.num);
> printf("0 0\n");
> free(d); free(b); free(c);
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator