『题解』CodeForces CF1728A Colored Balls Revisited
题目大意
给定 \(n\) 种颜色的球,数量分别为 \(a_1,a_2,\dots,a_n\),保证 \(a_i(1 \le i \le n)\) 为奇数。
每次可以任选两种颜色的球 \(a_i,a_j(i\ne j)\),各拿走一个(减去一)。可以得知,最后一定会剩下一种颜色的球。
最后剩下的一种颜色可能是什么?
思路
最后一定会剩下一种颜色的球,在 \(a_i\) 为奇数的情况下显然是成立的。
容易想到,数量最多的球,总会有一种情况是最后剩下的。
具体操作是,选择其中一种数量最多的颜色不动,把其它颜色的球全部拿完,最后如果有剩下的球,与这个最多数量的球消耗,最后一定还剩的是数量最多的球。
所以答案对所有颜色数量取 \(\max\),记录颜色编号即可。
代码
#include <iostream>
using namespace std;
template<typename T=int>
inline T read(){
T X=0; bool flag=1; char ch=getchar();
while(ch<'0' || ch>'9'){if(ch=='-') flag=0; ch=getchar();}
while(ch>='0' && ch<='9') X=(X<<1)+(X<<3)+(ch^48),ch=getchar();
if(flag) return X;
return ~(X-1);
}
template<typename T=int>
inline void write(T X){
if(X<0) putchar('-'),X=~(X-1);
T s[20],top=0;
while(X) s[++top]=X%10,X/=10;
if(!top) s[++top]=0;
while(top) putchar(s[top--]+'0');
putchar('\n');
}
int t,n,x,mx,p;
// t,n,x 输入数据,mx 最大值,p 最大值编号
int main(){
t=read();
while(t--){
n=read();
for(int i=1; i<=n; i++)
if((x=read())>mx)
mx=x,p=i;
write(p);
mx=p=0;
}
return 0;
}