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;
}