『题解』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;
}
posted @ 2022-09-16 22:10  仙山有茗  阅读(39)  评论(0编辑  收藏  举报