牛客-模拟、枚举与贪心-2022.10.18

昨天和今天写的题都比较简单,本来都不想挂,但是还是觉得浅浅记录一下

Captcha Cracker

简单模拟输出即可

#include <bits/stdc++.h>
using namespace std;
int main() {
    int t;
    cin >> t;
    while(t--) {
        string s;
        cin >> s;
        for(int i = 0; i < s.size(); i++) {
            if(s[i] == '0' || s[i] == '2' || s[i] == '4' || s[i] == '6' || s[i] == '9') {
                cout << s[i];
            } else if(s[i] == 'z' && i + 3 < s.size()) {
                if(s[i] == 'z' && s[i + 1] == 'e' && s[i + 2] == 'r' && s[i + 3] == 'o')
                    cout << 0, i += 3;
            } else if(s[i] == 't' && i + 2 < s.size()) {
                if(s[i] == 't' && s[i + 1] == 'w' && s[i + 2] == 'o')
                    cout << 2, i += 2;
            } else if(s[i] == 'f' && i + 3 < s.size()) {
                if(s[i] == 'f' && s[i + 1] == 'o' && s[i + 2] == 'u' && s[i + 3] == 'r')
                    cout << 4, i += 3;
            } else if(s[i] == 's' && i + 2 < s.size()) {
                if(s[i] == 's' && s[i + 1] == 'i' && s[i + 2] == 'x')
                    cout << 6, i += 2;
            } else if(s[i] == 'n' && i + 3 < s.size()) {
                if(s[i] == 'n' && s[i + 1] == 'i' && s[i + 2] == 'n' && s[i + 3] == 'e')
                    cout << 9, i += 3;
            }
        }
        cout << endl;
    }
    return 0;
}

回文数

输出第一个最小的非零的数字,如果存在零,只输出一个,然后输出零个数的一半,之后继续从小到大输出即可。

#include <bits/stdc++.h>
using namespace std;
int main() {
    vector<int> num(10, 0);
    int odd = 0, sumlen = 0;
    for(int i = 0; i < 10; i++) {
        cin >> num[i];
        if(num[i] % 2 == 1)
            odd += 1;
        sumlen = sumlen + num[i];
    }
    if(odd >= 2) {
        cout << -1 << endl;
        return 0;
    }
    if(sumlen == num[0]) {
        cout << 0 << endl;
        return 0;
    }
    if(odd == 1) {
        stack<int> res;
        string tar = "";
        bool flag = false;
        for(int i = 1; i <= 9; i++) {
            if(num[i] >= 2) {
                for(int j = 1; j <= num[i] / 2; j++) {
                    tar = tar + to_string(i);
                    res.push(i);
                    if(!flag) {
                        flag = true;
                        for(int j = 1; j <= num[0] / 2; j++)
                            tar = tar + "0", res.push(0);
                    }
                }
            }
        }
        for(int i = 0; i <= 9; i++) {
            if(num[i] % 2 == 1) {
                tar = tar + to_string(i);
            }
        }
        while(!res.empty()) {
            tar = tar + to_string(res.top());
            res.pop();
        }
        if(tar.size() == sumlen) {
            cout << tar << endl;
        } else
            cout << -1 << endl;
    } else if(odd == 0) {
        stack<int> res;
        bool flag = false;
        for(int i = 1; i <= 9; i++) {
            if(num[i] >= 2) {
                for(int j = 1; j <= num[i] / 2; j++) {
                    cout << i;
                    res.push(i);
                    if(!flag) {
                        flag = true;
                        for(int j = 1; j <= num[0] / 2; j++) {
                            cout << 0;
                            res.push(0);
                        }
                    }
                }
            }
        }
        while(!res.empty()) {
            cout << res.top();
            res.pop();
        }
        cout << endl;
    }
    return 0;
}

Tic-Tac-Toe

简单模拟输出即可

#include <bits/stdc++.h>
using namespace std;
int main() {
    int t;
    cin >> t;
    while(t--) {
        string s[3];
        for(int i = 0; i < 3; i++)
            cin >> s[i];
        bool winA = false, winB = false;
        if(s[0] == "AAA" || s[1] == "AAA" || s[2] == "AAA")
            winA = true;
        if(s[0] == "BBB" || s[1] == "BBB" || s[2] == "BBB")
            winB = true;
        
        if(s[0][0] == 'A' && s[1][0] == 'A' && s[2][0] == 'A')
            winA = true;
        if(s[0][1] == 'A' && s[1][1] == 'A' && s[2][1] == 'A')
            winA = true;
        if(s[0][2] == 'A' && s[1][2] == 'A' && s[2][2] == 'A')
            winA = true;
        
        if(s[0][0] == 'B' && s[1][0] == 'B' && s[2][0] == 'B')
            winB = true;
        if(s[0][1] == 'B' && s[1][1] == 'B' && s[2][1] == 'B')
            winB = true;
        if(s[0][2] == 'B' && s[1][2] == 'B' && s[2][2] == 'B')
            winB = true;
        
        if(s[0][0] == 'A' && s[1][1] == 'A' && s[2][2] == 'A')
            winA = true;
        if(s[0][2] == 'A' && s[1][1] == 'A' && s[2][0] == 'A')
            winA = true;
        
        if(s[0][0] == 'B' && s[1][1] == 'B' && s[2][2] == 'B')
            winB = true;
        if(s[0][2] == 'B' && s[1][1] == 'B' && s[2][0] == 'B')
            winB = true;
        
        if(winA && winB)
            cout << "invalid\n";
        if(winA && !winB)
            cout << "Yes\n";
        if(!winA && winB)
            cout << "No\n";
        if(!winA && !winB)
            cout << "draw\n";
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值