ABC310

发布时间 2023-07-17 13:01:30作者: V_Melville

T1:Order Something Else

模拟

代码实现
n, p, q = map(int, input().split())
d = list(map(int, input().split()))
print(min(p, q+min(d)))

T2:Strictly Superior

模拟

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

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    vector<int> p(n);
    vector<vector<int>> f(n);
    
    rep(i, n) {
        int c;
        cin >> p[i] >> c;
        f[i] = vector<int>(c);
        rep(j, c) cin >> f[i][j];
    }
    
    rep(i, n)rep(j, n) if (i != j) {
        if (p[i] < p[j]) continue;
        bool ok = true;
        for (int e : f[i]) {
            if (find(f[j].begin(), f[j].end(), e) == f[j].end()) ok = false;
        }
        if (!ok) continue;
        if (p[i] == p[j] and f[i] == f[j]) continue;
        puts("Yes");
        return 0;
    }
    
    puts("No");
    
    return 0;
}

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

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    vector<int> p(n);
    vector<bitset<101>> f(n);
    
    rep(i, n) {
        int c;
        cin >> p[i] >> c;
        rep(j, c) {
            int e;
            cin >> e;
            f[i][e] = 1;
        }
    }
    
    rep(i, n)rep(j, n) if (i != j) {
        if (p[i] < p[j]) continue;
        if ((f[i]&f[j]) != f[i]) continue;
        if (p[i] == p[j] and f[i] == f[j]) continue;
        puts("Yes");
        return 0;
    }
    
    puts("No");
    
    return 0;
}

T3:Reversible

可以先给木棍确定一个方向,只考虑以某个端点开始的字典序更小的字符串
然后用 set 来维护即可

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

st = set()
for _ in range(n):
    s = input()
    st.add(min(s, s[::-1]))

print(len(st))