【CF】Hello 2019!

深夜自闭orz,话说这些题直接翻译机翻成中文为何如此流畅,第一次看见如此流畅的机翻orz,这两场比赛感受到了被各路大神碾压的快感 CF hello 2019 官方题解

A

水题一道,看懂就能秒orz
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>

using namespace std;
char ss[15];
char sa[15];
int main() {
    scanf("%s",&ss[1]);
    for(int i=1;i<=5;i++) {
        scanf("%s",&sa[1]);
        if(sa[1]==ss[1]) {
            puts("YES"); return 0;
        }
        if(sa[2]==ss[2]) {
            puts("YES"); return 0;
        }
    }
    puts("NO");
}

B

水题一道,爆搜完就秒
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

int n;
int a[20];
int now;
void dfs(int x) {
    if(x==n+1) {
        if( (now%360+360)%360==0 ) {
            puts("YES"); exit(0);
        } 
        return ;
    }
    now += a[x];
    dfs(x+1);
    now -= 2*a[x];
    dfs(x+1); 
    now += a[x];
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        scanf("%d",&a[i]);
    }
    dfs(1);
    puts("NO");
}

C

给你若干个字符串,两个两个配,能够配对最多多少个合法括号序列。 考虑贪心,令两个可以配对的配对就是了。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<cstdio>
using namespace std;
const int maxn = 5e5+5;
int n,ans;
char ss[maxn];
map<int,int> ld,rd;
int ling;
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        scanf("%s",&ss[1]);
        int le = strlen(ss+1);
        int ll = 0; int rr=0;
        bool flag = 1;
        for(int j=1;j<=le;j++) {
            if(ss[j]=='(') {
                ll++;
            } else {
                if(ll>0) ll--;
                else rr++;
            }
        }
        if(ll&&rr) continue;
        if(ll==0&&rr==0) ling++;
        else if(ll) {
            if(rd[ll]) rd[ll]--,ans++;
            else ld[ll]++;
        } else {
            if(ld[rr]) ld[rr]--,ans++;
            else rd[rr]++;
        }
    }
    printf("%d",ling/2+ans);
}

考试的时候基本上所有的时间都肝在D题了,然而还是跪的 题意:开始给定一个数 n<= 1e15 , 每次等概率变成他的因数,求k次(k<=1e4)之后,他变成的数的期望值。(答案在mod 1e9+7意义下) 其实考场上想到dp方程还是很容易的,可是我们要想到每个质数的幂之间是独立算dp,最后是可以乘起来的.(智障如我就没想到)
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
int add(int x,int y) { x+=y; return x>=mod?x-mod:x; }
int sub(int x,int y) { x-=y; return x<0?x+mod:x; }
int mul(int x,int y) { return 1ll*x*y%mod; }
int inv[105];
ll n; int k;
int f[105];
int DP(int pp,int cc) {
    f[0]=1;
    for(int i=1;i<=cc;i++) f[i] = mul(f[i-1],pp);
    for(int i=1;i<=k;i++) {
        for(int  j=1;j<=cc;j++) {
            f[j] = add(f[j],mul(f[j-1],j));
            f[j] = mul(f[j],inv[j+1]);
        }
    }
    return f[cc];
}
int main() {
    int ans = 1;
    scanf("%I64d%d",&n,&k);
    inv[1] = inv[0] = 1;
    for(int i=2;i<=100;i++) inv[i] = mul(inv[mod%i],mod-mod/i);
    for(ll i=2;i*i<=n;i++) {
        if(n%i==0) {
            int cc = 0;
            while(n%i==0) cc++,n/=i;
            ans = mul(ans,DP(i,cc));
        }
    }
    if(n>1) ans = mul(ans,DP(n%mod,1));
    printf("%d",ans);
}

F

详见CF Hello 2019】莫比乌斯反演+bitset
posted @ 2019-01-05 01:53  Newuser233  阅读(6)  评论(0编辑  收藏  举报