zoukankan      html  css  js  c++  java
  • Full_of_Boys训练4总结

    题目来源:2017-2018 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2017)

    A.Cakey McCakeFace

    #include <bits/stdc++.h>
    #define pb(x) push_back(x)
    typedef long long ll;
    const int maxn = 2000+7;
    using namespace std;
    int n,m;
    ll a[maxn], b[maxn];
    map<ll, ll> Ma, Mb, M;
    ll anst,ans;
    int main() {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;++i)scanf("%lld",&a[i]),++Ma[a[i]];
        for(int i=0;i<m;++i)scanf("%lld",&b[i]),++Mb[b[i]];
        for(auto x1: Ma){
            for(auto x2: Mb)if(x1.first<=x2.first){
                M[x2.first-x1.first]+=min(x1.second,x2.second);
            }
        }
        for(auto x: M){
            if(x.second > anst){
                anst = x.second;
                ans = x.first;
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
    

    C.Macarons

    状压dp+矩阵快速幂裸题,然而。。。注意到矩阵乘法的复杂度很高,一个多余的mod,就会导致慢2倍以上,会TLE。。。好吧常数优化,太重要了。。。还发现结构体里的数组,开太大,会导致代码,崩的某名奇妙!!

    #include <cstdio>
    #define rg register
    #define pb(x) push_back(x)
    typedef long long ll;
    inline int readint(){
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    inline ll readll(){
        char c=getchar();ll x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    const ll mod = 1000000000;
    int n;
    ll m, ans[260][260], ans1[260][260], a[260][260], c[260][260], d[260][260];
    inline void dfs(int ss, int s, int x, int t) {
        if(x>=n){
            ++a[t][ss],a[t][ss]%=mod;
            return;
        }
        if(!(s&(1<<x))){
            dfs(ss,s|(1<<x),x+1,t);// 1*1
            dfs(ss,s|(1<<x),x+1,t|(1<<x));// 1*2
            if(x+1<n&&!(s&(1<<(x+1)))) dfs(ss,s|(1<<x)|(1<<(x+1)),x+2,t);// 2*1
        }
        else dfs(ss,s,x+1,t);
    }
    inline void mul(ll a[][260], ll b[][260], int n){
        for(rg int i=0;i<n;++i)
            for(int j=0;j<n;++j)ans[i][j]=0,c[i][j]=a[i][j],d[i][j]=b[i][j];
        for(rg int i=0;i<n;++i)
        for(rg int k=0;k<n;++k)if(c[i][k])
        for(rg int j=0;j<n;++j)if(d[k][j]){
            ans[i][j] = (ans[i][j] + (c[i][k]*d[k][j]))%mod;//TLE!!!: ans[i][j] = (ans[i][j] + (c[i][k]*d[k][j])%mod)%mod;
        }
        for(rg int i=0;i<n;++i)
            for(rg int j=0;j<n;++j)a[i][j]=ans[i][j];
    }
    ll L;
    int main() {
        n=readint(),m=readll();
        L = (1<<n);
        for(int s=0;s<L;++s){
            ans1[s][s]=1;
            dfs(s,s,0,0);
        }
        while(m != 0) {
            if(m&1)mul(ans1,a,L);
            if(ans1[0][0]==0)break;
            mul(a,a,L); m>>=1;
            if(ans1[0][0]==0)break;
        }
        printf("%lld
    ",ans1[0][0]%mod);
        return 0;
    }
    

    J.Frosting on the Cake

    相当于多项式乘法,然而,刚入门fft的我,直接写了fft。。。wa,应该是精度被卡,实际上,可以把三种颜色,直接分开算出来。

    K.Blowing Candles

    之前一直不会旋转卡壳,原理不难理解,只是计算几何的代码,感觉好难写。等写好了再贴出来吧

  • 相关阅读:
    使用adns库解析域名
    三星DRAM+NAND FLASH 合成MCP芯片介绍及应用攻略
    内核initcall分析
    linux head-common.s分析(转)
    linux heads分析(转)
    虚拟内存_内核空间_用户空间
    linux kernel学习笔记-5内存管理_转
    u-boot README--linux support
    u-boot README--Memory Management&initialize
    linux内核中mtd架构分析
  • 原文地址:https://www.cnblogs.com/RRRR-wys/p/9034277.html
Copyright © 2011-2022 走看看