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;
}
posted @ 2023-11-26 16:47  WW爆米花  阅读(2)  评论(0编辑  收藏  举报