牛客寒假补题五

共三题:

E:以为下一步要用特权,导致有四颗棋子的情况忽略了,我*

#include<bits/stdc++.h>
using namespace std;

const int N=5;
char a[N][N];
int T;

bool check(int i,int j){
    if(i==1&&j==1){
        if((a[i+1][j]=='X'||a[i+1][j]=='G')&&(a[i+2][j]=='X'||a[i+2][j]=='G'))
            return true;
        if((a[i+1][j+1]=='X'||a[i+1][j+1]=='G')&&(a[i+2][j+2]=='X'||a[i+2][j+2]=='G'))
            return true;
        if((a[i][j+1]=='X'||a[i][j+1]=='G')&&(a[i][j+2]=='X'||a[i][j+2]=='G'))
            return true;
    }
    if(i==1&&j==2){
        if((a[i][j-1]=='X'||a[i][j-1]=='G')&&(a[i][j+1]=='X'||a[i][j+1]=='G'))
            return true;
        if((a[i+1][j]=='X'||a[i+1][j]=='G')&&(a[i+2][j]=='X'||a[i+2][j]=='G'))
            return true;
    }
    if(i==1&&j==3){
        if((a[i][j-1]=='X'||a[i][j-1]=='G')&&(a[i][j-2]=='X'||a[i][j-2]=='G'))
            return true;
        if((a[i+1][j]=='X'||a[i+1][j]=='G')&&(a[i+2][j]=='X'||a[i+2][j]=='G'))
            return true;
        if((a[i+1][j-1]=='X'||a[i+1][j-1]=='G')&&(a[i+2][j-2]=='X'||a[i+2][j-2]=='G'))
            return true;
    }
    if(i==2&&j==1){
        if((a[i-1][j]=='X'||a[i-1][j]=='G')&&(a[i+1][j]=='X'||a[i+1][j]=='G'))
            return true;
        if((a[i][j+1]=='X'||a[i][j+1]=='G')&&(a[i][j+2]=='X'||a[i][j+2]=='G'))
            return true;
    }
    if(i==2&&j==2){
          if((a[i-1][j-1]=='X'||a[i-1][j-1]=='G')&&(a[i+1][j+1]=='X'||a[i+1][j+1]=='G'))
            return true;
        if((a[i-1][j+1]=='X'||a[i-1][j+1]=='G')&&(a[i+1][j-1]=='X'||a[i+1][j-1]=='G'))
            return true;
        if((a[i+1][j]=='X'||a[i+1][j]=='G')&&(a[i-1][j]=='X'||a[i-1][j]=='G'))
            return true;
         if((a[i][j+1]=='X'||a[i][j+1]=='G')&&(a[i][j-1]=='X'||a[i][j-1]=='G'))
            return true;
    }
    if(i==2&&j==3){
          if((a[i-1][j]=='X'||a[i-1][j]=='G')&&(a[i+1][j]=='X'||a[i+1][j]=='G'))
            return true;
        if((a[i][j-1]=='X'||a[i][j-1]=='G')&&(a[i][j-2]=='X'||a[i][j-2]=='G'))
            return true;
    }
    if(i==3&&j==1){
         if((a[i-1][j]=='X'||a[i-1][j]=='G')&&(a[i-2][j]=='X'||a[i-2][j]=='G'))
            return true;
        if((a[i][j+1]=='X'||a[i][j+1]=='G')&&(a[i][j+2]=='X'||a[i][j+2]=='G'))
            return true;
        if((a[i-1][j+1]=='X'||a[i-1][j+1]=='G')&&(a[i-2][j+2]=='X'||a[i-2][j+2]=='G'))
            return true;
    }
    if(i==3&&j==2){
         if((a[i-1][j]=='X'||a[i-1][j]=='G')&&(a[i-2][j]=='X'||a[i-2][j]=='G'))
            return true;
        if((a[i][j-1]=='X'||a[i][j-1]=='G')&&(a[i][j+1]=='X'||a[i][j+1]=='G'))
            return true;
    }
    if(i==3&&j==3){
         if((a[i-1][j]=='X'||a[i-1][j]=='G')&&(a[i-2][j]=='X'||a[i-2][j]=='G'))
            return true;
        if((a[i][j-1]=='X'||a[i][j-1]=='G')&&(a[i][j-2]=='X'||a[i][j-2]=='G'))
            return true;
        if((a[i-1][j-1]=='X'||a[i-1][j-1]=='G')&&(a[i-2][j-2]=='X'||a[i-2][j-2]=='G'))
            return true;
    }
    return false;
}

int main(){
    cin>>T;
    int sum=0;
    while(T--){
        sum=0;
        for(int i=1;i<=3;i++){
            for(int j=1;j<=3;j++){
                cin>>a[i][j];
                if(a[i][j]=='X') sum++;
            }
        }
        if(sum==2) {cout<<"Yes"<<endl;continue;}
        
            int f=0;
            for(int i=1;i<=3;i++){
                for(int j=1;j<=3;j++){
                    if(a[i][j]=='X'){
                        if(check(i,j)) f=1;
                    }
                }
            }
            if(f==1||sum==0) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
    }
    return 0;
}

C:tmd我就说比赛的时候怎么都调不对,明明思路行得通,发现重新写了一遍之后忘了x*2<=y的简单情况,写了三个多小时,艹

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

string a,b,c;
int n,x,y;
int ans=0;

signed main(){
    IOS;
    cin>>n>>x>>y;
    cin>>a;
    cin>>b;
    cin>>c;
    
    if(x*2<=y){
        
    for(int i=0;i<n;i++){
        if(c[i]=='1'){
            if(a[i]==b[i]){
                ans+=x;
            }
        }
        else{
            if(a[i]!=b[i]){
              ans+=x;
            }
        }
    }
    }
    else{
        
        int a0=0,a1=0,b0=0,b1=0;
    vector<int> a0i;
    vector<int> a1i;
    vector<int> b0i;
    vector<int> b1i;
    for(int i=0;i<n;i++){
        if(c[i]=='1'){
            if(a[i]==b[i]){
                if(a[i]=='1') {a1++;a1i.push_back(i);}
                else {a0++;a0i.push_back(i);}
                if(b[i]=='1') {b1++;b1i.push_back(i);}
                else {b0++;b0i.push_back(i);}
            }
        }
        else{
            if(a[i]!=b[i]){
                if(a[i]=='1') {a1++;a1i.push_back(i);}
                else {a0++;a0i.push_back(i);}
                if(b[i]=='1') {b1++;b1i.push_back(i);}
                else {b0++;b0i.push_back(i);}
            }
        }
    }
    int an=min(a0,a1);
    int bn=min(b0,b1);
    vector<int> t0;
    vector<int> t1;
    if(an>=bn){
        if(a0>=a1){
            for(auto i:a0i){
                if(c[i]=='1') t0.push_back(i);
                else t1.push_back(i);
            }
            int sum=min(t1.size(),t0.size());
            int en=a0-a1;
            if(sum>=en){
                if((a0+a1)%2==1) ans=(a0+a1-1)/2*y+x;
                else ans=(a0+a1)/2*y;
            }
            else{
                int p=sum/2;
                ans=(a1+p)*y;
                ans+=(a0-a1-p)*x;
            }  
        }
        else{
            for(auto i:a1i){
                if(c[i]=='1') t1.push_back(i);
                else t0.push_back(i);
            }
            int sum=min(t1.size(),t0.size());
            int en=a1-a0;
            if(sum>=en){
                if((a0+a1)%2==1) ans=(a0+a1-1)/2*y+x;
                else ans=(a0+a1)/2*y;
            }
            else{
                int p=sum/2;
                ans=(a0+p)*y;
                ans+=(a1-a0-p)*x;
            }  
        }
    }
    else{
        if(b0>=b1){
            for(auto i:b0i){
                if(c[i]=='1') t0.push_back(i);
                else t1.push_back(i);
            }
            int sum=min(t1.size(),t0.size());
            int en=b0-b1;
            if(sum>=en){
                if((b0+b1)%2==1) ans=(b0+b1-1)/2*y+x;
                else ans=(b0+b1)/2*y;
            }
            else{
                int p=sum/2;
                ans=(b1+p)*y;
                ans+=(b0-b1-p)*x;
            }  
        }
        else{
            for(auto i:b1i){
                if(c[i]=='1') t1.push_back(i);
                else t0.push_back(i);
            }
            int sum=min(t1.size(),t0.size());
            int en=b1-b0;
            if(sum>=en){
                if((b0+b1)%2==1) ans=(b0+b1-1)/2*y+x;
                else ans=(b0+b1)/2*y;
            }
            else{
                int p=sum/2;
                ans=(b0+p)*y;
                ans+=(b1-b0-p)*x;
            }
        }
    }
    
//     int s01=0,s10=0,s00=0,s11=0;
    
//     for(int i=0;i<n;i++){
//         if(c[i]=='1'){
//             if(a[i]==b[i]){
//                 if(a[i]=='1') s11++;
//                 else s00++;
//             }
//         }
//         else{
//             if(a[i]!=b[i]){
//                 if(a[i]=='1') s10++;
//                 else s01++;
//             }
//         }
//     }
    
//     int ma=max({s01,s00,s10,s11});
//     int sum=s01+s00+s11+s10-ma;
    
//     if(ma>=sum) ans=sum*y+(ma-sum)*x;
//     else{
//         if((sum+ma)%2==1) ans=(sum+ma)/2*y+x;
//         else ans=ans=(sum+ma)/2*y;
//     }
        
    }
    
    cout<<ans<<endl;
}

L:数学题,不是我能想出来的,没啥好说的

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

int T;

signed main(){
    cin >> T;
    while(T--){
        int n;
        cin >> n;
        if(n % 6 < 3){
            vector<int> a = {2, 4, 1};
            vector<int> b = {3, 6, 5};
            cout << n / 3 << endl;
            set<int> st;
            for(int i = 1; i <= n / 6; i++){
                for(auto &i : a){
                    cout << i << " ";
                    i += 6;
                }
                cout << endl;
                for(auto &i : b){
                    cout << i << " ";
                    i += 6;
                }
                cout << endl;
            }
        }
        else{
            if(n == 3){
                cout << 0 << endl;
                continue;
            }
            if(n <= 5){
                cout << 1 << endl;
                cout << "2 4 1" << endl;
                continue;
            }
            cout << n / 3 << endl;
            cout << "2 4 1" << endl;
            cout << "3 9 5" << endl;
            cout << "6 8 7" << endl;
            vector<int> a = {14, 11, 10};
            vector<int> b = {12, 15, 13};
            int t = n / 3 - 3;
            t /= 2;
            set<int> st;
            for(int i = 1; i <= t; i++){
                for(auto &i : a){
                    cout << i << " ";
                    i += 6;
                }
                cout << endl;
                for(auto &i : b){
                    cout << i << " ";
                    i += 6;
                }
                cout << endl;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值