链接:https://ac.nowcoder.com/acm/contest/19305/1026 来源:牛客网
题目描述 “伟大的勇栗兔栽栗女王,所有栗子看到您都不寒而栗,但也非常尊重您。您骑着威风凛凛的小白兔,带领栗子们奋勇前行。伟大史诗告诉我们,烈兔勇栗从大草原飞奔出来, 冲在每场战争的前线——无论您在哪里,他们都能找到您。骑小白兔飞驰吧,凶猛的女王,但愿您有真正的朋友和软弱的敌人。” 今天,冰雪聪明的栗酱终于玩到了她梦寐很久的文明游戏。 不过作为一个萌新,兔头獐脑的栗酱自然不愿意第一次玩就遇到一个尴尬的结局,于是希望通过你来寻找一个完美结局。
已知游戏结束前场上有n个国家,第i个国家有ai块土地,任意2个国家若是想建立外交关系,则需要互相在对方的一块土地上建立一个大使馆。 一块土地只能建立一个大使馆,若一个国家和其他国家存在外交关系,则需要征用一块己方土地作为备用大使馆。 完美结局的定义是:找到最多数量的国家,使他们相互之间存在外交关系。 输入描述: 第一行一个数T,表示有T组数据。 对于每组数据,第一行输入一个数n,表示国家的数量,接下来一行输入n个数,a1,a2,…,an,其中ai表示第i个国家拥有的土地数量。每两个相邻的数之间用空格隔开。 输出描述: 对于每一个询问,输出一个数,即完美结局下,相互建立外交关系的国家数量。 示例1 输入 复制 2 5 2 2 2 2 2 10 8 6 5 9 2 7 10 3 3 9 输出 复制 2 6 说明 对于第一个样例: 最多只能找到2个国家,使他们互相建立外交关系。 对于第二个样例: 第1,2,4,6,7,10个国家间可互相建立外交关系,最多数量为6。 备注: T≤10 1≤n≤1000 1≤ai≤n #include<bits/stdc++.h> using namespace std; int main(){ int T,n; cin>>T; while(T--){ cin>>n; int a[1000]={0}; int t,ans=0; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ if(a[j]<a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(int i=0;i<n;i++){ if(i<a[i]) ans++; } printf("%d\n",ans); } return 0; } 如果有3 (4,4,4)这样一组样例就好理解一点了。 首先是排序然后就是找到比(当前的数)大的所有数+1(也就是加上当前的国家)和当前国家的土地数相等, 然而3 (4,4,4)这样的话就会发现如果所有国家的土地数都大于国家总数这种情况要输出国家的数 4 (4 4 1 1)这种情况要输出最小的土地数 也就是改为判断当前国家土地的数量只要大于等于当前是第几个国家(i也就是有几个国家建立外交了)能建立外交的国家就加一