首页 > 其他分享 >Codeforces Round #747 (Div. 2) D Educational Codeforces Round 115 D

Codeforces Round #747 (Div. 2) D Educational Codeforces Round 115 D

时间:2022-10-24 01:33:07浏览次数:48  
标签:10 Educational const int Codeforces long second Round

D. The Number of Imposters

显然我们对于每一个关系就相当于连一个无向边
我们显然对于每一个连通块来讲 我们确定其中一个也就确定了这个连通块里的所有
就相当于二分图染色了 直接做即可 到时候我们看白色黑色谁多就加到答案里去
判断无解 也和二分图染色一样

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int sum[N];
void solve() {
    int n;cin>>n;
    vector<pair<int,int>>p(n+1);
    vector<int>b(n+10),a(n+10);
    for(int i=1;i<=n;i++){
        cin>>p[i].first>>p[i].second;
        a[p[i].first]++;
        b[p[i].second]++;
    }
    sort(all(p));
    int ans=0;
    for(int i=1;i<=n;i++){
        if(p[i].first==p[i-1].first||p[i].first==p[i+1].first){
            ans+=(b[p[i].second]-1)*(a[p[i].first]-1);
        }
    }
    cout<<sum[n]-ans<<endl;
}
signed main(){
    fast
    int t;t=1;cin>>t;
    for(int i=3;i<N;i++)sum[i]=i*(i-1)*(i-2)/6;
    while(t--) {
        solve();
    }
    return ~~(0^_^0);
}

D. Training Session

考虑反向 总的-不合法
显然对于每一个同组的 我们之间绝对不会出现同组别的
我们不合法的解 就只有
同 同 同 同
1 2 3 4
找下面的cnt1 cnt2 cnt3 的个数
就是不合法的个数

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int sum[N];
void solve() {
    int n;cin>>n;
    vector<pair<int,int>>p(n+1);
    vector<int>b(n+10),a(n+10);
    for(int i=1;i<=n;i++){
        cin>>p[i].first>>p[i].second;
        a[p[i].first]++;
        b[p[i].second]++;
    }
    sort(all(p));
    int ans=0;
    for(int i=1;i<=n;i++){
        if(p[i].first==p[i-1].first||p[i].first==p[i+1].first){
            ans+=(b[p[i].second]-1)*(a[p[i].first]-1);
        }
    }
    cout<<sum[n]-ans<<endl;
}
signed main(){
    fast
    int t;t=1;cin>>t;
    for(int i=3;i<N;i++)sum[i]=i*(i-1)*(i-2)/6;
    while(t--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:10,Educational,const,int,Codeforces,long,second,Round
From: https://www.cnblogs.com/ycllz/p/16820217.html

相关文章

  • Codeforces Round #829 (Div. 2)
    咕咕咕。C2.MakeNonzeroSum(hardversion)易得有奇数个非零值时无解。现在考虑将相邻的两个非零值配对,只要每一个非零值对都搞成和为零,总的和就为零。由于非零值只......
  • Educational Codeforces Round 137 (Rated for Div. 2) A-F
    比赛链接A题解知识点:数学。\(4\)位密码,由两个不同的数码组成,一共有\(C_4^2\)种方案。从\(10-n\)个数字选两个,有\(C_{10-n}^2\)种方案。结果为\(3(10-n)(9-n)\)......
  • Codeforces Round #829 (Div. 2) D. Factorial Divisibility(数学)
    题目链接题目大意:\(~~\)给定n个正整数和一个数k,问这n个数的阶乘之和能不能被k的阶乘整除既:(a\(_{1}\)!+a\(_{2}\)!+a\(_{3}\)!+....+a\(_{n}\)!)\(~\)%\(~\)k!\(~\)==......
  • CSS background-image的使用,让超大背景图的主要区域显示
    CSSbackground-image的使用,让超大背景图的主要区域显示,你的电脑屏幕小,原图是1920*1110的   ......
  • Codeforces 1682 D Circular Spanning Tree
    题意1-n排列,构成一个圆;1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数;询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案。提示1.......
  • Atcoder Regular Round #151 B题 A < AP 题解
    题意:给定一个排列\(p\),求满足下列条件的\(a\)数组的数量。\(1\lea_i\lem\)。\(a\)数组的字典序小于\(\{a_{p_1},a_{p_2},\cdots,a_{p_n}\}\)。题解:由于每......
  • Codeforces Round #758 (Div.1 + Div. 2) C
    C.GameMaster//不明白为什么tag上没有二分我二分一下就过了我们显然知道判断是否能打赢全部直接通过连边来判断是否能遍历全部点如何连边:我们同组一定相连对于排......
  • CodeForces-1143#C 题解
    正文♦时间复杂度:\(\mathcal{O}(n)\)思维题,不需要建树。设数组\(a\)记录每一个节点是否尊重它的父节点,数组\(b\)记录是否有节点尊重它,特别的,叶子节点必然不被尊重。......
  • Educational Codeforces Round 138
    EducationalCodeforcesRound138这把是真的丢了大脸。Dashboard$\color{Green}{★}\\$表示赛时做出。$\color{Yellow}{★}\\$表示赛后已补。$\color{Red}{★}......
  • Codeforces 823B
    题意:对若干正整数二元组\((x_i,t_i)\),求一个实数\(x_0\),使得\(max\{t_i+|x_i-x_0|\}\)最小。n<=1e5。思考:​ 虽然问的是\(x_0\),但不妨对这个最小的最大值进行二分,也......