iwtgm-29
A,
当前数是奇数特判不是1后直接输出
若是偶数就一直除以2,直至成为一个奇数,特判不是1后输出
别想复杂别想复杂
void solve() {
ll n;cin>>n;
if(n&1){
cout<<"YES"<<endl;return ;
}
while(n%2==0){
n/=2;
}
if(n==1){
cout<<"NO"<<endl;
}else cout<<"YES"<<endl;
}
E.
2020和2021只相差1
我们把2021看成2020和1分开处理
我们把n%2020,若余数不为0则一定存在2021,且余数是几就要存在几个
判余数*2021小于等于n即存在
void solve() {
int n;cin>>n;
int tmp=n%2020;
if(tmp*2021<=n){
cout<<"YES"<<endl;
}else cout<<"NO"<<endl;
}
H.
错1位放即可
void solve() {
int n;cin>>n;
for(int i=2;i<=n;i++){
cout<<i<<' ';
}
cout<<1;
cout<<endl;
}
B.
两个维度限制,选的两组里男生不能重复,女生不能重复
步骤:
选男生1,然后再在其他男生配对里选一个(现在能保证男生一定不会重复)也就是总配对数-男生1的配对数
然后再减去与男生1配对的女生的配对数(即保证女生也不重复)
注意上面这个操作要遍历男生1所有的配对
#define int long long
map<int,pair<int,vector<int>>>boy;
map<int,int>girl;
vector<int>boy_,girl_;
void solve() {
int num_boys,num_girls,k;cin>>num_boys>>num_girls>>k;
boy.clear();girl.clear();boy_.clear();girl_.clear();
for(int i=0,x;i<k;i++){
cin>>x;
boy_.push_back(x);
}
for(int i=0,x;i<k;i++){
cin>>x;
girl_.push_back(x);
}
for(int i=0;i<k;i++){
boy[boy_[i]].first++;
boy[boy_[i]].second.push_back(girl_[i]);
girl[girl_[i]]++;
}
int ans=0;
for(auto tmp:boy){
int fi=tmp.first,se=tmp.second.first;
auto tt=tmp.second.second;
for(int i=0;i<tt.size();i++){
ans+=k-se-girl[tt[i]]+1;
//cout<<"***"<<k-se-girl[tt[i]]+1<<endl;
}
}
ans/=2;
cout<<ans<<endl;
}