1. 程式人生 > 實用技巧 >Codeforces Round #548題解

Codeforces Round #548題解

A題

列舉每一位,如果是偶數就加上i

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=2e5+10;
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    string s;
    cin>>s;
    int ans=0;
    s=" "+s;
    for(int i=1;i<(int
)s.size();i++){ int x=s[i]-'0'; if(x%2==0){ ans+=i; } } cout<<ans<<endl; return 0; }
View Code

B題

這題一定要注意一個細節,之後選的數不能小於前面選的數

也就是你前面選的都會被後面制約

因此只能從後往前考慮。顯然最後全拿,之後就是a[i]和x-1取min,其中x是當前數後面的約束

#include<bits/stdc++.h>
using namespace std;
typedef 
long long ll; typedef pair<int,int> pll; const int N=2e5+10; int n; int a[N]; int main(){ ios::sync_with_stdio(false); cin>>n; int i; int x=1e9+1; for(i=1;i<=n;i++) cin>>a[i]; ll ans=0; for(i=n;i>=1;i--){ x=min(a[i],x-1); if(x<=0
) break; ans+=x; } cout<<ans<<endl; return 0; }
View Code

C題

正難則反還是好用,正著很難想,但是反著看,答案不就是全部個數-沒有經過黑邊個數,那麼就是連通塊劃分,每個連通塊裡面隨便選

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=4e5+10;
const int mod=1e9+7;
int h[N],ne[N],e[N],w[N],idx;
int st[N];
int cnt;
ll ans;
ll qmi(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1){
            res=res*a%mod;
        }
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
void add(int a,int b,int c){
    e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
}
void dfs(int u,int fa){
    st[u]=1;
    cnt++;
    for(int i=h[u];i!=-1;i=ne[i]){
        int j=e[i];
        if(st[j])
            continue;
        if(w[i]==1)
            continue;
        dfs(j,u);
    }
}
int main(){
    ios::sync_with_stdio(false);
    memset(h,-1,sizeof h);
    int n,k;
    cin>>n>>k;
    int i;
    for(i=1;i<n;i++){
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c);
        add(b,a,c);
    }
    ans=qmi(n,k);
    for(i=1;i<=n;i++){
        if(!st[i]){
            cnt=0;
            dfs(i,-1);
            ans=(ans-qmi(cnt,k)+mod)%mod;
        }
    }
    cout<<ans<<endl;
    return 0;
}
View Code

D題

神tm莫比烏斯反演,我說怎麼想不出來,鴿了,不會數論演算法