Codeforces Round #697 (Div. 3)-多一些不为什么的坚持
Codeforces Round #697 (Div. 3)
https://codeforces.ml/contest/1475
A. Odd Divisor
A题上去被卡了,老弱了。(一开始直接暴力枚举n的因子没看到n的范围结果直接T了)
n分三种情况:
如果n是1则不满足要求,输出“NO”即可;
如果n是奇数则必存在一个大于1的奇数因子(自己),故直接输出"YES";
如果n是偶数则一直除以2直到出现奇数或1为止。
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=2e5+7;
const ll mod=1e9+7;
int main(){
IO;
int t=1;
cin>>t;
while(t--){
ll n;cin>>n;
if(n==1)cout<<"NO"<<endl;
else if(n%2)cout<<"YES"<<endl;
else{
int flag=0;
while(n%2==0&&n>1)n/=2;
if(n%2&&n>1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}
B. New Year's Number
求一个数是否可以由a个2020和b个2021相加得到,直接判断n/2020和n%2020的大小即可,因为n%2020就是2021的个数,如果n%2020 > n/2020,则必无解
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=5e5+7;
const ll mod=1e9+7;
int main(){
IO;
int t=1;
cin>>t;
while(t--){
ll n;
cin>>n;
ll k=n/2020;
ll p=n%2020;
if(p>k)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}
C. Ball in Berland
求可以同时出现的对数。
因为每对只出现一次,所以将男孩、女孩的标号出现次数记录下来,当遍历到i时,首先a[i]和b[i]的次数减1,此时出现次数即为i后面出现的对数,所以i的贡献就是i后面的总对数减去a[i]和b[i]的出现次数.
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=2e5+7;
const ll mod=1e9+7;
int a[N],b[N];
map<int,int>v1,v2;
int main(){
IO;
int t=1;
cin>>t;
while(t--){
int n,m,k;
cin>>n>>m>>k;
v1.clear();
v2.clear();
for (int i = 1; i <= k; ++i)
{
cin>>a[i];
v1[a[i]]++;
}
for (int i = 1; i <= k; ++i)
{
cin>>b[i];
v2[b[i]]++;
}
ll ans=0;
for (int i = 1; i < k; ++i)
{
v1[a[i]]--;
v2[b[i]]--;
ans+=k-i-(v1[a[i]]+v2[b[i]]);
}cout<<ans<<endl;
}
return 0;
}
E. Advertising Agency
题意为求取得最大值的种树
去重后直接从大到小排序,依次取数直到k取完为止,在k最后一次取数时如果此时元素个数比需要取的个数大,则由组合数学可算出有多少种取法。
(注意需要乘法逆元)
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=2e5+7;
const ll mod=1e9+7;
ll ksm(ll x,ll y){
ll p=1;
while(y){
if(y&1)p=p*x%mod;
x=x*x%mod;
y>>=1;
}return p%mod;
}
struct $
{
ll a,b;
ll sub;
}arr[N];
map<ll,int>mp;
bool cmp1(ll x,ll y){
return x>y;
}
bool cmp2($ x,$ y){
if(x.sub==y.sub)return x.b<y.b;
else return x.sub>y.sub;
}
ll f[1007];
int main(){
IO;
int t=1;
cin>>t;
f[0]=1;
for (int i = 1; i < 1001; ++i)
{
/* code */f[i]=f[i-1]*i%mod;
}
while(t--){
ll n,k;
cin>>n>>k;
map<int,int>mp;
vector<int>v;
for (int i = 0; i < n; ++i)
{
ll x;
cin>>x;
if(!mp[x])v.push_back(x);
mp[x]++;
}
sort(v.begin(),v.end(),cmp1);
ll ans=1;
for(auto i : v){
if(k<mp[i]){
ans=((f[mp[i]]*ksm(f[mp[i]-k],mod-2)%mod)*ksm(f[k],mod-2)%mod)*ans%mod;
}
k-=mp[i];
if(k<=0)break;
}
cout<<ans<<endl;
}
return 0;
}
只做了4道,可能是被今晚的cf搞崩心态了,一直交不上去。
继续努力!!!
Code will change the world !

浙公网安备 33010602011771号