首页 > 其他分享 >Educational Codeforces Round 143

Educational Codeforces Round 143

时间:2023-09-19 15:56:42浏览次数:37  
标签:Educational 143 int Codeforces long pair using define mod

A. Two Towers

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define mp make_pair
using pii = pair<int, int>;
using vi = vector<int>;
constexpr int inf = 1e18;

void solve(){
    int n , m , cnt = 0;
    string a , b;
    cin >> n >> m;
    cin >> a >> b;
    reverse(b.begin(), b.end());
    a += b;
    for( int i = 1 ; i < a.size() ; i ++ )
        cnt += (a[i] == a[i-1]);
    cout << ( cnt <= 1 ? "YES\n" : "NO\n");

}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    for( cin >> t ; t ; t -- )
        solve();
    return 0;
}

B. Ideal Point

找一下是否存在两个区间的交集只包含\(k\)

#include <bits/stdc++.h>

using namespace std;

#define int long long

using pii = pair<int, int>;
using vi = vector<int>;
#define mp make_pair
constexpr int inf = 1e18;

void solve() {
    int n , k;
    cin >> n >> k;
    vector<pii> e(n);
    for( auto & [l , r ] : e )
        cin >> l >> r;

    for( const auto & [ a , b ] : e )
        for( const auto & [ c , d ] : e ){
            int l = max(a , c ) , r = min( b , d );
            if( l == r and l == k ){
                cout << "YES\n";
                return ;
            }
        }
    cout << "NO\n";
    return;
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    for (cin >> t; t; t--)
        solve();

    return 0;
}

C. Tea Tasting

对于每一种茶来说,二分的求出能够品尝他的人的区间,然后对这部分人进行区间修改,然后对于边界单独处理一下即可。

#include <bits/stdc++.h>

using namespace std;

#define int long long

using pii = pair<int, int>;
using vi = vector<int>;
#define mp make_pair
constexpr int inf = 1e18;

void solve() {
    int n;
    cin >> n;
    vi a(n + 1), b(n + 1), c(n + 2), d(n + 2);

    for (int i = 1; i <= n; i++) cin >> b[i];
    for (int i = 1; i <= n; i++) cin >> a[i], a[i] += a[i - 1];
    for (int i = 1; i <= n; i++) {
        int l = i, r = n, ans = i - 1;
        for (int mid, t; l <= r;) {
            mid = (l + r) / 2, t = a[mid] - a[i - 1];
            if (t <= b[i]) ans = mid, l = mid + 1;
            else r = mid - 1;
        }
        if (ans >= i) c[i]++, c[ans + 1]--;
        d[ans + 1] += b[i] - a[ans] + a[i - 1];
    }
    for (int i = 1; i <= n; i++) {
        c[i] += c[i-1];
        cout << c[i] * (a[i] - a[i-1] ) + d[i] << " ";
    }
    cout << "\n";



    return;
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    for (cin >> t; t; t--)
        solve();

    return 0;
}

D. Triangle Coloring

简单带说就是要给边权最大的两条边染上不同颜色,考虑最大值是否相同,可以计算出染色方案数。

然后就是考虑第三个的点的染色方案,因为要保证红蓝数量相同,所以要从环里面选出一半来。

#include <bits/stdc++.h>

using namespace std;

#define int long long

using pii = pair<int, int>;
using vi = vector<int>;
#define mp make_pair
constexpr int inf = 1e18;
constexpr int mod = 998244353;

const int N = 3e5 + 5;
int fact[N], invFact[N];

int power(int x, int y) {
    int ans = 1;
    while (y) {
        if (y & 1) ans = ans * x % mod;
        x = x * x % mod, y >>= 1;
    }
    return ans;
}

int inv(int x) {
    return power(x, mod - 2);
}

int C(int x, int y) {
    return fact[x] * invFact[x - y] % mod * invFact[y] % mod;
}

void solve() {
    int n;
    cin >> n, n /= 3;
    vector<array<int, 3>> e(n);
    for (auto &it: e)
        for (auto &i: it)
            cin >> i;
    int res = 1;
    for (auto &it: e) {
        sort(it.begin(), it.end());
        if (it[0] == it[1] and it[1] == it[2]) res = res * 3 % mod;
        else if (it[0] == it[1]) res = res * 2 % mod;
    }
    res = res * C(n, n / 2) % mod;
    cout << res << "\n";
    return;
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    fact[0] = 1, invFact[0] = inv(1);
    for (int i = 1; i < N; i++)
        fact[i] = fact[i - 1] * i % mod, invFact[i] = inv(fact[i]);
    solve();
    return 0;
}

标签:Educational,143,int,Codeforces,long,pair,using,define,mod
From: https://www.cnblogs.com/PHarr/p/17714859.html

相关文章

  • Educational Codeforces Round 107
    依然是四题,但是感觉太久没打,好像变得迟钝了。B题大概就是令\[c={10}^k,a=c*3^k,b=c*2^k\]C的话直接暴力维护每种颜色的第一个位置就行,反正只有50个D的话刚开始没什么想法,构造题什么的真的不会啊打表之后发现,对于k,在cost为0的情况下,最多能造出长度为\(k^2+1\)的串,也就是能够......
  • Codeforces Round 897 (Div. 2) A-E
    A.green_gold_dog,arrayandpermutation题意:给出一个长为\(n\)的数组\(a\),找到一个长为\(n\)的排列\(b\),使得\(a\)与\(b\)对应位置上的元素的差尽可能大Solution将数组\(a\)排序,然后令排列\(n,n-1,...,2,1\)对应到对应的元素即可structnode{intx,id;boolope......
  • CodeForces 1863G Swaps
    洛谷传送门CF传送门看到\(a_{a_i}\)和\(a_i\in[1,n]\),果断连边\(i\toa_i\),得到内向基环森林。那么每次相当于把\(a_i\)变成自环,连边\(i\toa_{a_i}\)。但是每次操作都改变图的形态很不好办,考虑打标记。每次\(\operatorname{swap}(a_i,a_{a_i})\),我们就把\(i......
  • Codeforces Global Round 17 A. Anti Light's Cell Guessing
    给一个\(n\timesm\)的网格,里面藏了一个炸弹\((x_0,y_0)\)。你可以选择\(k\)个坐标\((x_1,y_1),(x_2,y_2),\cdots,(x_k,y_k)\)。第\(i\)次选择计算机会回复你一个数\(d_i=|x_0-x_i|+|y_0-y_i|\)。至少需要选出多少个坐标才能确定\((x_0,y_0)\)的位......
  • Codeforces Round 764 (Div. 3) B. Make AP
    有三个正整数\(a,b,c\)。需要执行以下操作严格一次:选择任意一个正整数\(m\)并让严格一个\(a,b,c\)之一乘以\(m\)。但不能改变他们的顺序。回答是否可以经过一次操作后使\(a,b,c\)变为等差。分类讨论题:三种情况满足一种即可。(已知\(a,b,c\geq1\))\(ma......
  • Codeforces Round 773 (Div. 2) B. Power Walking
    有\(n\)个增幅道具,第\(i\)个道具种类为\(a_i\),一个人的强度\(w\)为他所有道具的种类数。对于\(k]\in[1,n]\),询问将\(n\)个道具分配给\(k\)个人且每个人至少分配到一个道具后,能够得到的最想强度和\(\sum_{i=1}^{n}w_i\)。观察一:最低强度和\(\sum_{i=1}^{k}w......
  • Educational Codeforces Round 100
    B.FindTheArray对于条件二来说,1是万金油的存在,所以我们只需要把奇数位置或偶数位置全部变成1即可。因为要求差值小于\(\fracs2\),所以我可以求出奇偶位的和修改较小值即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingpii=pair<in......
  • codeforces图论合集
    CyclicOperations给定一个数组$a$,每次构造一个数组$\spacel\space$长度为$\spacek\space$,数组$\spacea\space$与$\spacel\space$转换关系如下:$a_{l_1}\tol_2\space,\spacea_{l_2}\tol_3\space,\spacea_{l_3}\tol_4\space,\space...\space,\spacea_{l_n}\tol_1$......
  • Codeforces Round 897 (Div. 2) 考试总结
    前言这次打得很好,相较于div3的脑残题和签到题来说,div2的思维难度更加的大。同时还有除传统题外,其他的题型出现。比如交互题等。这次能在考场上想出三道较于之前是有很大的进步的。赛时实况:ABCDE1E2F√√√××××赛后改题情况:ABCDE1E2F......
  • Codeforces 1868C/1869E Travel Plan 题解 | 巧妙思路与 dp
    题目链接:TravelPlan题目大意:\(n\)个点的完全二叉树,每个点可以分配\(1\simm\)的点权,定义路径价值为路径中最大的点权,求所有路径的价值和。对于任意长度(这里主要指包括几个节点)的路径\(t\),最大点权不超过\(k\)的方案数有\(k^t\)个,因此最大点权恰好为\(k\)的方案数有......