读书人

北大acm1009题求高手拯救能试的数

发布时间: 2012-02-09 18:22:27 作者: rapoo

北大acm1009题,求高手拯救,能试的数据都试了,还wrong answer

#include<stdio.h>
void getlocation(int);
int getresult(int,int);
int findvalue(int);
struct{
int value;
int total;
}pexi[1001];
struct{
int output;
int location;
}pexo[10000];
long flag[100000]={0};
int px,py,n,b,low;
int main(){
int i,j,k=0,count;
scanf("%d",&n);
while(n){
pexi[0].value=0;pexi[0].total=0;
i=1;
while(1){
scanf("%d %d",&pexi[i].value,&count);
if((pexi[i].value==0)&&(count==0)) break;
pexi[i].total=pexi[i-1].total+count;
i++;
}
b=i-1;
low=pexi[b].total/n;
j=0;
for(i=0;i<b;i++){
getlocation(pexi[i].total+1);
if((px-1)>=1&&(py-1)>=1)
{flag[j]=pexi[i].total-n; j++; }
if((px-1)>=1)
{flag[j]=pexi[i].total+1-n; j++; }
if((px-1)>=1&&(py+1)<=n)
{ flag[j]=pexi[i].total+2-n; j++; }
if((py-1)>=1)
{flag[j]=pexi[i].total; j++; }
if((py+1)<=n)
{flag[j]=pexi[i].total+2; j++; }
if((px+1)<=low&&(py-1)>=1)
{flag[j]=pexi[i].total+n; j++; }
if((px+1)<=low)
{flag[j]=pexi[i].total+1+n; j++; }
if((px+1)<=low&&(py+1)<=n)
{flag[j]=pexi[i].total+n+2; j++; }
}
for(i=0;i<j;i++){
for(k=i+1;k<j;k++){
if(flag[i]>flag[k]){
int temp=flag[i];
flag[i]=flag[k];
flag[k]=temp;
}
}
}
k=0;
for(i=0;i<j;i++){
if(flag[i]==flag[i+1]) continue;
getlocation(flag[i]);
pexo[k].output=getresult(px,py);
pexo[k].location=flag[i];
k++;
}
getlocation(pexi[b].total);
pexo[k].output=getresult(px,py);
pexo[k].location=pexi[b].total;
printf("%d\n",n);
j=k;i=0;k=0;
while(i<j)
{ k=i+1;
while(1){
if(k!=j){
if(pexo[i].output!=pexo[k].output){
printf("%d %d\n",pexo[i].output,pexo[k].location-pexo[i].location); break;}}
else { if(pexo[i].output!=pexo[k].output){
printf("%d %d\n",pexo[i].output,pexo[k-1].location-pexo[i].location+1);
printf("%d %d\n",pexo[k].output,pexi[b].total-pexo[k-1].location);break;}
else{
printf("%d %d\n",pexo[i].output,pexi[b].total-pexo[i].location+1);break;}
}
k++;
}
i=k;
}
printf("0 0\n");
scanf("%d",&n);
}
printf("0\n");
return 0;
}



void getlocation(int lc)
{
if(lc%n==0) {px=lc/n;py=n;}
else {px=lc/n+1;py=lc%n;}
}


int findvalue(int location1)
{
int k,value1;
for(k=0;k<=b;k++){
if(location1<=pexi[k].total) {
value1=pexi[k].value;break;}
}
return value1;
}


int getresult(int ix,int iy)
{ int i,j,max=0,result;
for(i=ix-1;i<=ix+1;i++){
for(j=iy-1;j<=iy+1;j++){
if(i<1||j<1||j>n||i>low) continue;
result=findvalue((i-1)*n+j)-findvalue((ix-1)*n+iy);
if(result<0) result=-result;
if(result>max) max=result;
}
}
return max;
}

[解决办法]
不是还有警告信息未处理吗
[解决办法]
可能是编译器不同,VC下有很多警告
17行:warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS
等等。。
你在linux下测试的吧

[解决办法]

探讨

有没有可能还有什么特殊的情况没考虑到,或者数组越界,在或者是格式上有什么错误,,,,,,求指教,,刚接触acm不久,很多不是太明白,,

[解决办法]
建议下载08或10版的VS看 那个检查的多点。。

读书人网 >C语言

热点推荐