期望得分:100+0+100=200
实际得分:100+20+0=120
离散化搞搞
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 100001 int a[N],b[N]; bool vis[N]; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } int main() { freopen("del.in","r",stdin); freopen("del.out","w",stdout); int n,k; read(n); read(k); for(int i=1;i<=n;i++) read(a[i]),b[i]=a[i]; sort(b+1,b+n+1); int tot=unique(b+1,b+n+1)-b-1; for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+tot+1,a[i])-b; int cnt1=0,cnt2=0; for(int i=1;i<=n;i++) if(!vis[a[i]]) vis[a[i]]=true,cnt1++; else cnt2++; if(k<=cnt2) printf("%d\n",cnt1); else printf("%d\n",cnt1-(k-cnt2)); return 0; }