第一个题:就是去让找说谎者,这个a[i]好像是最少的说谎者,第一遍读错了,直接寄了,所以直接统计一下每个a[i]的值,用map存一下,然后去遍历一遍就可以了。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int a[1001];
map<int,int> mp;
int n;
cin>>n;
if(n==1)
{
int x;
cin>>x;
if(x==0)
{
cout<<"0"<<endl;
continue;
}
else{
cout<<"-1"<<endl;
continue;
}
}
for(int i=1;i<=n;i++)
{
cin>>a[i];
mp[a[i]]++;
}
int flag=0;
int sum=0;
for(int i=0;i<=n;i++)
{
sum+=mp[i];
;
if(sum==n-i)
{
cout<<n-sum<<endl;
flag=1;
break;
}
}
if(flag==0){
cout<<"-1"<<endl;
}
}
return 0;
}
第二个题,题意大概是取余找回文数,还要求这个取余的数要最大,如果是无穷大的话那么就直接输出0就可以了。(一个简单的__gcd问题)
犯病时刻:写了两个memset,导致赛后直接超时;
今天补的AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL a[100010];
LL b[100010];
int main()
{
LL t;
cin>>t;
while(t--)
{
//memset(a,0,sizeof(a));
//memset(b,0,sizeof(b));
LL n;
cin>>n;
LL r=n;
LL maxx=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int num=0;
int x=0;
for(int i=1;i<=n/2;i++)
{
int j=n-i+1;
int tmp=abs(a[i]-a[j]);
if(tmp)
{
if(x==0) x=tmp;
else x=__gcd(x,tmp);
}
}
cout<<x<<endl;
}
return 0;
}