首页 > 其他分享 >ABC355

ABC355

时间:2024-05-25 23:33:17浏览次数:26  
标签:ps int rep cin ++ ABC355 using

A. Who Ate the Cake?

模拟

代码实现
a, b = map(int, input().split())
if a == b:
    print(-1)
else:
    print(6-a-b)

B. Piano 2

模拟

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

using namespace std;
using P = pair<int, int>;

int main() {
    int n, m;
    cin >> n >> m;
    
    vector<int> a(n), b(m);
    rep(i, n) cin >> a[i];
    rep(i, m) cin >> b[i];
    
    vector<P> ps;
    rep(i, n) ps.emplace_back(a[i], 0);
    rep(i, m) ps.emplace_back(b[i], 1);
    
    sort(ps.begin(), ps.end());
    
    rep(i, n+m-1) {
        if (ps[i].second == 0 and ps[i+1].second == 0) {
            puts("Yes");
            return 0;
        }
    }
    
    puts("No");
    
    return 0;
}

C. Bingo 2

模拟

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

using namespace std;

int main() {
    int n, t;
    cin >> n >> t;
    
    vector<int> row(n), col(n);
    int dia1 = 0, dia2 = 0;
    
    rep(ti, t) {
        int a;
        cin >> a;
        --a;
        int i = a/n, j = a%n;
        
        auto add = [&](int& x) {
            x++;
            if (x == n) {
                cout << ti+1 << '\n';
                exit(0);
            }
        };
        
        add(row[i]); 
        add(col[j]);
        if (i == j) add(dia1);
        if (i+j == n-1) add(dia2);
    }
    
    puts("-1");
    
    return 0;
}

D. Intersecting Intervals

可以用总方案数容斥掉不相交的区间的个数
什么时候两区间会不相交?一个区间的右端点小于另一个区间的左端点
那么我们可以像B题那样对区间左右两端点分别标记为 \(0\) 和 \(1\),然后放在一起排序,接着遍历所有二元组 \((x, t)\),当 \(t=0\) 时,将答案减去前面右端点的个数,当 \(t=1\) 时,将右端点个数 +1

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

using namespace std;
using P = pair<int, int>;
using ll = long long;

int main() {
    int n;
    cin >> n;
    
    vector<P> ps;
    rep(i, n) {
        int l, r;
        cin >> l >> r;
        ps.emplace_back(l, 0);
        ps.emplace_back(r, 1);
    }
    
    sort(ps.begin(), ps.end());
    
    ll ans = (ll)n*(n-1)/2;
    int rs = 0;
    for (auto [x, t] : ps) {
        if (t == 0) ans -= rs;
        else rs++;
    }
    
    cout << ans << '\n';
    
    return 0;
}

标签:ps,int,rep,cin,++,ABC355,using
From: https://www.cnblogs.com/Melville/p/18213158

相关文章

  • ABC355 A ~ D
    A可能写麻烦了,但是至少它对了。#include<bits/stdc++.h>#definegtgetchar#defineptputchartypedeflonglongll;constintMAXN=2e5+5;constintmod=998244353;llread(){ llx=0,f=1;charch=gt(); while(ch<'0'||ch>'......
  • ABC355 D
    D-IntersectingIntervals我们思考如何计算不交的线段数量首先总的线段如果全部相交那么线段数应为n*(n-1)/2那么对于每对r[i]<l[i]都为不交的线段所以我们需要计算不交的线段数同时删去自己本身点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineall(......