#include<iostream>
#include<algorithm>
#include <cstring>
#include<cstdio>
using namespace std;
const int N=50100;
int s[N][N];
int main()
{
int n,x,y,d,i=0,j=0,r;
scanf("%d%d",&n,&r);
while(n--)
{
scanf("%d%d%d",&x,&y,&d);
x++,y++;
s[x][y]+=d;
i=max(i,x);
j=max(j,y);
}
}
调试后结果如下:
/tmp/ccWwwRDi.o: In function `__static_initialization_and_destruction_0(int, int)':
a.cpp:(.text+0x10d): relocation truncated to fit: R_X86_64_32 against `.bss'
a.cpp:(.text+0x11c): relocation truncated to fit: R_X86_64_32 against `.bss'
collect2: error: ld returned 1 exit status
错误原因:数组开的太大
50100*50100约等于2.5e9
一维数组开到2e9+10也会出现这种情况
因为题目有内存限制 一般不能超过256MB
2.printf("%d",(int)(r*1000));
(r1000)加括号
(int)r1000 结果是先对r类型转换,再计算
下面两个结果是不一样的 第一个可以得到正确结果 第二个不可以
ll ans=s/((ll)n*(ll)n);
ll ans=s/(ll)(n*n);
sum[i]=sum[i-1]+a[i]-ave;
sum[i]+=sum[i-1]+a[i]-ave;
不用写加号 加号是没用的,还容易出错
int max1=-1,max2=-1,ans=0;
for(int i=1;i<=m;i++)
{
int x=coun[find(b[i])],y=coun[find(c[i])];
if(x>max1||(x==max1&&y>max2))
{
max1=x;
max2=y;
ans=i;
}
}
int max1=0,max2=0,ans=1;
for(int i=1;i<=m;i++)
{
int x=coun[find(b[i])],y=coun[find(c[i])];
if(x>max1||(x==max1&&y>max2))
{
max1=x;
max2=y;
ans=i;
}
}
以上两个都可以过 但是下面的不能过
int max1=0,max2=0,ans=0;
for(int i=1;i<=m;i++)
{
int x=coun[find(b[i])],y=coun[find(c[i])];
if(x>max1||(x==max1&&y>max2))
{
max1=x;
max2=y;
ans=i;
}
}
因为1~2000都不符合条件 所以1~2000任意一个都可以 但是不能过的代码输出答案为0 解决方法为上面2中任意一种
if(i%(k+1)==1) res=0;
if(res==k+1) res=0;
当 k+1=1 时第一种写法有问题 任何数对1取余结果都为0
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m;
int main()
{
int k=N;
scanf("%d%d",&n,&m);
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
k=min(y-x,k);
}
printf("%d\n",k+1);
int res=0;
for(int i=1;i<=n;i++)
{
if(i%(k+1)==1) res=0,printf("...\n");
if(res==k+1) res=0;
printf("%d ",res++);
}
}