首页 > 其他分享 >ABC337

ABC337

时间:2024-01-20 23:44:54浏览次数:26  
标签:int rep cin len ABC337 vector ans

T1:Scoreboard

模拟

代码实现
n = int(input())

st, sa = 0, 0
for i in range(n):
    x, y = map(int, input().split())
    st += x;
    sa += y
    
if st < sa:
    print('Aoki')
if st == sa:
    print('Draw')
if st > sa:
    print('Takahashi')

T2:Extended ABC

正则表达式

代码实现
#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    
    regex re("A*B*C*");
    if (regex_match(s, re)) puts("Yes");
    else puts("No");
    
    return 0;
}

T3:Lining Up 2

从排在第一的人开始往后遍历即可

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<int> a(n);
    rep(i, n) cin >> a[i];
    rep(i, n) if (a[i] != -1) a[i]--;
    
    vector<int> d(n);
    rep(i, n) if (a[i] != -1) d[a[i]] = i;
    
    int s = -1;
    rep(i, n) if (a[i] == -1) s = i;
    
    vector<int> ans{s};
    rep(i, n-1) {
        s = d[s];
        ans.push_back(s);
    }
    
    rep(i, n) cout << ans[i]+1 << ' ';
    
    return 0;
}

T4:Cheating Gomoku Narabe

其实就是对每行每列分别考虑以下的一维问题:

  • 在一个长度为 \(n\) 的字符串中,通过将 . 修改为 o 使得其中有长度为 \(k\) 个 o 的连续子串的最少修改次数

首先要判定长度为 \(k\) 的子串是否合法,也就是不能存在 X
其次每个长度为 \(k\) 的子串的贡献就是其中 . 的个数
简单的维护一下滑动窗口也就够了

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;

const int INF = 1001001001;

int solve(string s, int k) {
    int n = s.size();
    int res = INF;
    {
        int xs = 0, es = 0, len = 0;
        rep(i, n) {
            xs += s[i] == 'x';
            es += s[i] == '.';
            len++;
            if (len > k) {
                xs -= s[i-k] == 'x';
                es -= s[i-k] == '.';
                len--;
            }
            if (len == k) {
                if (xs == 0) res = min(res, es);
            }
        }
    }
    return res;
} 

int main() {
    int h, w, k;
    cin >> h >> w >> k;
    
    vector<string> s(h);
    rep(i, h) cin >> s[i];
    
    int ans = INF;
    rep(ri, 2) {
        rep(i, h) ans = min(ans, solve(s[i], k));
        {
            vector<string> t(w, string(h, '.'));
            rep(i, h)rep(j, w) t[j][i] = s[i][j];
            swap(h, w);
            s = t;
        }
    }
    
    if (ans == INF) ans = -1;
    cout << ans << '\n';
    
    return 0;
}

标签:int,rep,cin,len,ABC337,vector,ans
From: https://www.cnblogs.com/Melville/p/17977375

相关文章