Codeforcesラウンド#589 div.2のC、D

これは非常に形而上学の複雑さの感覚です...私は怠け者かもしれ長すぎる料理QAQになります。

C

  • 問題の意味:指定された\(X、N \)は、n個のG(I、P)乗法に品質係数からxを求めます
  • xの素因数の各々を得る、nは直接に接続された計算する乗算:考えます。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> VI;
vector<int> prime;
const int MOD = 1e9+7;
void get(ll x){
    for(int i=2;i*i<=x;++i){
        if(x%i==0){
            prime.push_back(i);
            while(x%i==0)   x/=i;
        }
    }
    if(x!=1)   prime.push_back(x);
}
ll qpow(ll a,ll b){
    ll res =1;
    while(b){
        if(b&1) res = res*a%MOD;
        a = a*a%MOD;
        b>>=1;
    }
    return res;
}
const int N = 1e5+10;
int cnt[N];
int main(){
    ll x,n;
    ll ans = 1;
    cin >> x >> n;
    get(x);
    for(auto p:prime){
        ll res = 1;
        while(res<=n/p){
            res*=p;
            ans = ans * qpow(p,n/res)%MOD;  // 不是res的n/res次方 而是 p的n/res次方 这样可以避免乘过之后影响前面
        }
    }
    ll t = (ll)ans;
    cout << t << endl;
}

インクルージョン排除ゲーム、聞かせてpはインクルージョン排除を必要としないコードを見つける前には影響しません将来的に引き継ぐが、他の人に見てどのように考えてきた、直接、まだpの終わりに行うことができます

D

  • 質問の意味:あなたはこの図の三分の(アナログ二部グラフ)を入れて、マップを与えられました。
  • アイデア:暴力ポイントが、VとUなしの辺場合1.、uは染色を染めていないポイントを選択し、vは染めていない、そしてuは染めの色をV状態を確認するために広がっていく。
    2。すべての3つの点が染色される1〜3の分析を繰り返し、三色が存在し、4の分析M(辺の数)== |。COL1 | * | COL2 | + | COL1 | * | COL3 | + | COL2 | * | COL3 |。、異なるセットが直接各点について2点のエッジの異なるセットがあるかどうか5.分析すべきエッジがあるため
#include<bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> VI;

const int N = 1e5+10;
vector<int> G[N];
int head[N],tot;
int cnt[4];
vector<int> block[4];
int color[N];
void add(int u,int v){G[u].push_back(v);}
int n,m;
int main(){
    scanf("%d%d",&n,&m);
    int u,v;
    for(int i=1;i<=m;++i){
        scanf("%d%d",&u,&v);
        add(u,v);
        add(v,u);
    }
    for(int col = 1;col<=3;++col){
        int idx = 0;
        for(int i=1;i<=n;++i)   if(color[i]==0){idx = i;break;}
        if(idx ==0){
            color[1] = 0;   break;
        }
        color[idx] = col;
        for(auto v:G[idx]){
            if(!color[v])   color[v] = -1;
        }
        for(int i=1;i<=n;++i){
            if(color[i]==0) color[i] = col;
            if(color[i]==-1)    color[i] = 0;
        }
    }
    for(int i=1;i<=n;++i){
        cnt[color[i]]++;
        block[color[i]].push_back(i);
    }
    int sign = 0;
    if(cnt[0] || !cnt[1] || !cnt[2] || !cnt[3] || m!= cnt[1]*cnt[2] + cnt[2]*cnt[3] + cnt[1]*cnt[3]){
        sign = 1;
    }
    for(auto u:block[1]){
        sort(G[u].begin(),G[u].end());
        for(auto v:block[2]){
            auto it = lower_bound(G[u].begin(),G[u].end(),v);
            if(it == G[u].end() || *it!=v) sign = 1;
        }
        for(auto v:block[3]){
            auto it = lower_bound(G[u].begin(),G[u].end(),v);
            if(it == G[u].end() || *it!=v) sign = 1;
        }
    }
    for(auto u:block[2]){
        sort(G[u].begin(),G[u].end());
        for(auto v:block[3]){
            auto it = lower_bound(G[u].begin(),G[u].end(),v);
            if(it == G[u].end() || *it!=v) sign = 1;
        }
    }
    if(sign){
        puts("-1");
        return 0 ;
    }
    for(int i=1;i<=n;++i){
        printf("%d ",color[i]);
    }
    puts("");
    return 0;
}

感覚的判断の4と5を繰り返しているが、実際にアウトの時間は5決定していません

おすすめ

転載: www.cnblogs.com/xxrlz/p/11612329.html