题意翻译
高桥君最喜欢AC水题,但是呢,高桥君有点健忘。
他很有可能会把已经AC的题再AC一次,这样叫做一次无用功
问高桥君,有多少无用功呢?
输入N,代表高桥君做AC了多少题
输入N个数,代表这次AC的题目号
传送门
提交了四次才对...
一开始没想太多随便写了个代码上去,第二个测试点就错了:
#include<bits/stdc++.h>
using namespace std;
long long n,a[100050];
int i,j,sum=0,ans=0;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n;i++){
ans=0;
for(j=i+1;j<=n;j++){
if(a[i]==a[j]&&a[i]!=0){
ans++;
a[j]=0;
}
}
if(ans>0){
sum++;
}
}
cout<<sum<<endl;
}
进过微微调整,我想到了排序,这样既不会TLE也不会WA结果:
#include<bits/stdc++.h>
using namespace std;
long long n,a[1000001];
int i,j,sum=0;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
if(a[i]>a[j]){
swap(a[i],a[j]);
}
}
}
for(i=1;i<=n;i++){
if(a[i]==a[i+1]){
sum++;
}
}
cout<<sum<<endl;
}
呵,说什么来什么,第三个点TLE了...
But , 不是还有sort吗,最快的方法!
code:
#include<bits/stdc++.h>
using namespace std;
long long n,a[1000001];
int i,j,sum=0;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(i=1;i<=n;i++){
if(a[i]==a[i+1]){
sum++;
}
}
cout<<sum<<endl;
//注:AT题加回车输出
}
//by----luogu-ZHR20100222
烷酶结束!!!(为什么我打 ‘wanmei’ 会出来烷酶啊doge)