1、测试点2:最高分数为0
我真的觉得以后一定要关注数据的以下信息:
1)小(几位啊,用int还是longlong,如果后面有Int*int的也要考虑结果用longlong )
2)正负数,0
2、讲解错误代码
以下这段代码无法通过测试点2,就算做了后面结果输出的那个处理,这个处理也是有局限的,他只能处理这种:
2
1 0
2 -1
不能处理这种
2
1 -1
2 0
总结错误代码的问题:
1也就是说,只要分数为0的学校编号是比1大的,都不行,因为这段代码很有问题,默认所有编号的分数是0,所以你又怎么比呢,而且如果把分数都归-1,假如最高的是-1分呢,虽然没有这个测试点。
2如果n=4,编号是1到4,而每个循环都是0到n-1,所以编号为n的那个学校的分数根本没有记进去。
错误代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node{
int no;
int score;
};
bool cmp(Node a,Node b)
{
return a.score>b.score;
}
int main()
{
int n;cin>>n;
Node a[n];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
a[i].no=i;
}
for(int i=0;i<n;i++)
{
int x,sc;cin>>x>>sc;
a[x].score+=sc;
}
sort(a,a+n,cmp);
if(a[1].score==0&&a[0].score==0)
{
cout<<a[1].no<<" "<<0<<endl;
}
else
{
cout<<a[0].no<<" "<<a[0].score<<endl;
}
return 0;
}
但是错误代码也有些我复习到的:
1声明结构体数组的两种方法
1)
typedef struct Node{
}a[N];
2)
struct Node{
};
Node a[N];
2结构体内部元素清0的两方法:
1)memset(a,0,sizeof(a));
2)Node a[n]={0};
3、正确代码:
所以就是说,越简单越好是吗,肯定啊!
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;cin>>n;
int maxi=0,a[100010]={0};
while(n--)
{
int i,s;cin>>i>>s;
a[i]+=s;
if(a[i]>=a[maxi])
{
maxi=i;
}
}
cout<<maxi<<" "<<a[maxi];
return 0;
}