Codeforces Round #697 (Div. 3)

Codeforces Round #697 (Div. 3)

A.Odd Divisor


int main(){
    int N;
    sd1(N);
    for(int i = 0; i < N; i++){
        LL num;
        sl1(num);
        if(num % 2 != 0) cout << "YES" << endl; 
        else{
            while(num /= 2){
                if(num == 1) {
                    cout << "NO" << endl;
                    break;
                }
                if(num % 2 != 0) {
                    cout << "YES" << endl;
                    break;
                }
            }
        }   
    }
}

B. New Year’s Numbe

int main(){
    int N;
    sd1(N);
    for(int i = 0; i < N; i++){
        int n;
        sd1(n);
        int m = n % 2020;
        int t = n / 2020;
        if(t * 2020 + m == n && n >= 2020 && t >= m) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
}

C. Ball in Berland


int main(){
    sd1(N);
    while(N--){
        int b, g, k;
        sd3(b, g, k);
        ans = 0;
        boy.clear();
        girl.clear();
        ms(boys, 0);
        ms(girls, 0);
        for(int i = 0; i < k; i++){
            int j;
            cin >> j;
            boy[j]++;
            boys[i] = j;
        }
        for(int i = 0; i < k; i++){
            int j;
            cin >> j;
            girl[j]++;
            girls[i] = j;
        }
        for(int i = 0; i < k; i++){
           ans += k - boy[boys[i]] - girl[girls[i]] + 1;
        }
        cout << ans/2 << endl;
    }
}

E. Advertising Agency

题意:
将n个数中选出k个数,组成的和最大,有几种选法
思路:
将n个数降序排列,取前k个,其中判断与第k个相同的个数有多少个,排列组合即可

int N;
int a[MAXN];
bool cmp(int a, int b){
    return a > b;
}
inline LL qpow(LL a , LL b , LL modd){		//快速幂 
	LL ans = 1 ;
	while(b){
		if(b & 1)	ans = ans * a % modd ;
		a = a * a % modd ;
		b >>= 1 ;
	}
	return ans ;
}
inline LL C(LL n , LL m){			//组合数Cnm的值 
	LL ans1 = 1 , ans2 = 1 , ans3 = 1 ;
	for(LL i = 1 ; i <= n ; i++)
		ans1 = ans1 * i % mod ;
	for(LL i = 1 ; i <= m ; i++)
		ans2 = ans2 * i % mod ;
	for(LL i = 1 ; i <= n - m ; i++)
		ans3 = ans3 * i % mod ;
	return ans1 * qpow(ans2 , mod - 2 , mod) % mod * qpow(ans3 , mod - 2 , mod) % mod ;
	//费马小定理 
}
int main(){
    int T;
    sd1(T);
    while(T--){
        int n, k;
        sd2(n, k);
        for(int i = 1; i <= n; i++){
            sd1(a[i]);
        }
        sort(a+1, a+n+1, cmp);
        int cnt1 = 0, cnt2 = 0;
        for(int i = 1; i <= n; i++){
            if(a[i] == a[k]) cnt1++;
        }
        for(int i = k; i >= 0; i--){
            if(a[i] == a[k]) cnt2++;
        }
        LL ans = C(cnt1, cnt2);
        //cout <<  cnt2 << cnt1 << endl;
        cout << ans << endl;
    }
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值