一開始沒讀懂題目,將unique翻譯成了公平,然後便將重心移向了尋找排在最中間的數,徹底走歪了。
#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
int arr[100001];
bool cmp(int a,int b){
if(a!=b)return a<b;
}
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
sort(arr,arr+n,cmp);
if(n==1||n==2){
printf("None");
return 0;
}
if(n%2!=0){
int left=n/2-1,right=n/2+1;
while(left>=0){
if(arr[left]==arr[n/2]&&arr[right]==arr[n/2]){
left--;
right++;
}else if(arr[left]!=arr[n/2]&&arr[right]!=arr[n/2]){
printf("%d",arr[n/2]);
break;
}else{
printf("None");
break;
}
}
if(left<0)printf("None");
}else{
int left=n/2-2,right=n/2+1;
while(left>=0){
if(arr[left]==arr[n/2]&&arr[right]==arr[n/2]){
left--;
right++;
}else if(arr[left]!=arr[n/2]&&arr[right]!=arr[n/2]){
printf("%d",arr[n/2]);
}else{
printf("None");
break;
}
}
if(left<0)printf("None");
}
}
讀懂題目後,這題還是很容易做的
#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
int arr1[10001]={0},arr2[100001];
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
int n,j;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&arr2[i]);
arr1[arr2[i]]++;
}
for(j=0;j<n;j++){
if(arr1[arr2[j]]==1){
printf("%d",arr2[j]);
break;
}
}
if(j==n)printf("None");
return 0;
}