zoukankan      html  css  js  c++  java
  • Codeforces Round #191 (Div. 2)

    在div 188中,幸运的达成了这学期的一个目标:CF1800+,所以这次可以打星去做div2,有点爽。

    A.Flipping Game 直接枚举

    B. Hungry Sequence 由于素数的分布大概10个中有一个,所以直接筛法筛1e5个即可。

    C. Magic Five 删除串s中的某些字符,使得他整除5,并且跟删除顺序有关,现在问有k个串s连在一起组成一个新的串,问新的串有多少种删除方式。

    我们可以看每一个串,由于整除5的数的末尾只能为0或者5。

    用样例二 13990作为说明。

    考虑只有一个时,在13990中,只有第4位(从0开始算),则前面有2^4中删除方式。

    如果加上一个,即1399013990时,则删除方式有2^4+2^(4+5)。

    如果再加上一个时,即139901399013990,则删除方式有2^4+2^(4+5*2)+2^(4+5*3)。

    因此我们可以知道,如果单一一个串S中第i位(从0开始)为0或者5时,该串重复k次,则有

    2^i+2^(i+|S|)+...+2^( i+|S|*(len-1) ) = 2^i * ( 2^0+2^len+2^(len*2)+...+2^(len*(n-1)) )

    由于n,len都比较大,所以需要用到等比数列求和公式以及快速幂,可以化为

    2^i * ( 2^(len*n)-1 ) / 2^len

    因此这里的除法需要用到逆元。

    于是这题可以解决。

    D. Block Tower 只要在同一个连通块中,就可以从一个出发,把其他的所有城市人数上限置为200。

    直接DFS一下,进去的时候,该地建100的城市,在DFS在该地结束时,如果该地是由其他城市来到,则直接拆掉该地,然后再把该地置为200。

    E.待补。

    代码:

    A

    #include <set>
    #include <map>
    #include <list>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    #define debug puts("here")
    #define rep(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define REP(i,a,b) for(int i=a;i<=b;i++)
    #define foreach(i,vec) for(unsigned i=0;i<vec.size();i++)
    #define pb push_back
    #define RD(n) scanf("%d",&n)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define RD4(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
    #define All(vec) vec.begin(),vec.end()
    #define MP make_pair
    #define PII pair<int,int>
    #define PQ priority_queue
    
    /******** program ********************/
    
    const int MAXN = 105;
    
    int a[MAXN];
    int n;
    
    int cc(int x,int y){
        int ans = 0;
        for(int i=1;i<x;i++)
            ans += a[i];
        for(int i=x;i<=y;i++)
            ans += !a[i];
        for(int i=y+1;i<=n;i++)
            ans += a[i];
        return ans;
    }
    
    int main(){
    
    #ifndef ONLINE_JUDGE
    	freopen("sum.in","r",stdin);
    	//freopen("sum.out","w",stdout);
    #endif
    
        while(cin>>n){
            int ans = 0;
            rep1(i,n)
                RD(a[i]);
            rep1(i,n)
                for(int j=i;j<=n;j++)
                    ans = max(ans,cc(i,j));
            cout<<ans<<endl;
        }
    
    	return 0;
    }
    

    B

    #include <set>
    #include <map>
    #include <list>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    #define debug puts("here")
    #define rep(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define REP(i,a,b) for(int i=a;i<=b;i++)
    #define foreach(i,vec) for(unsigned i=0;i<vec.size();i++)
    #define pb push_back
    #define RD(n) scanf("%d",&n)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define RD4(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
    #define All(vec) vec.begin(),vec.end()
    #define MP make_pair
    #define PII pair<int,int>
    #define PQ priority_queue
    
    /******** program ********************/
    
    const int MAXN = 2e6+5;
    
    vector<int> p;
    bool use[MAXN];
    
    void init(){
        for(int i=2;i<MAXN;i++)
            if(!use[i]){
                p.pb(i);
                for(int j=i+i;j<MAXN;j+=i)
                    use[j] = true;
            }
    }
    
    int main(){
    
    #ifndef ONLINE_JUDGE
    	freopen("sum.in","r",stdin);
    	//freopen("sum.out","w",stdout);
    #endif
    
        init();
        int n;
        while(cin>>n){
            rep(i,n)
                printf("%d ",p[i]);
            puts("");
        }
    
    	return 0;
    }
    

      

    C

    #include <set>
    #include <map>
    #include <list>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    #define debug puts("here")
    #define rep(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define REP(i,a,b) for(int i=a;i<=b;i++)
    #define foreach(i,vec) for(unsigned i=0;i<vec.size();i++)
    #define pb push_back
    #define RD(n) scanf("%d",&n)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define RD4(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
    #define All(vec) vec.begin(),vec.end()
    #define MP make_pair
    #define PII pair<int,int>
    #define PQ priority_queue
    
    /******** program ********************/
    
    const ll MOD = 1000000007;
    
    ll pw(ll p, ll n){
        ll sum = 1;
        while(n > 0){
            if(n & 1)
                sum = (sum * p) % MOD;
            n >>= 1;
            p = p * p % MOD;
        }
        return sum;
    }
    
    void ex_gcd(ll a,ll b,ll &gcd,ll &x,ll &y){
        if(b==0){
            x = 1;
            y = 0;
            gcd = a;
        }else{
            ex_gcd(b,a%b,gcd,y,x);
            y -= x*(a/b);
        }
    }
    
    ll Inv(ll n){
        ll x,y,gcd;
        ex_gcd(n,MOD,gcd,x,y);
        return gcd==1 ? (x%MOD+MOD)%MOD : -1;
    }
    
    int main(){
    
    #ifndef ONLINE_JUDGE
    	freopen("sum.in","r",stdin);
    	//freopen("sum.out","w",stdout);
    #endif
    
        string s;
        ll n;
        while(cin>>s>>n){
            ll len = s.size();
            ll ans = 0;
    
            rep(i,len)
                if(s[i]=='0'||s[i]=='5')
                    ans += pw(2,i)*Inv( pw(2,len)-1 )%MOD*( pw(2,len*n)-1 )%MOD;
    
            cout<<(ans%MOD+MOD)%MOD<<endl;
        }
    
    	return 0;
    }
    

      

    D

    #include <set>
    #include <map>
    #include <list>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    #define debug puts("here")
    #define rep(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define REP(i,a,b) for(int i=a;i<=b;i++)
    #define foreach(i,vec) for(unsigned i=0;i<vec.size();i++)
    #define pb push_back
    #define RD(n) scanf("%d",&n)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define RD4(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
    #define All(vec) vec.begin(),vec.end()
    #define MP make_pair
    #define PII pair<int,int>
    #define PQ priority_queue
    
    /******** program ********************/
    
    const int MAXN = 505;
    
    char s[MAXN][MAXN];
    int n,m;
    bool use[MAXN][MAXN];
    
    struct node{
        char op;
        int x,y;
        node(){}
        node(char a,int b,int c):op(a),x(b),y(c){}
    };
    
    vector<node> vec;
    
    int dx[] = {0,0,-1,1};
    int dy[] = {1,-1,0,0};
    
    bool out(int x,int y){
        return x<1||y<1||x>n||y>m;
    }
    
    void dfs(int x,int y,bool has){
        use[x][y] = true;
    
        bool ok = false;
        rep(i,4){
            int cx = dx[i]+x;
            int cy = dy[i]+y;
            if(!out(cx,cy)&&!use[cx][cy]&&s[cx][cy]=='.')
                ok = true;
        }
    
        if(!ok&&has){
            vec.pb( node('R',x,y) );
            return;
        }
    
    
        vec.pb( node('B',x,y) );
        rep(i,4){
            int cx = dx[i]+x;
            int cy = dy[i]+y;
            if( !out(cx,cy) && !use[cx][cy] && s[cx][cy]=='.'){
                dfs(cx,cy,true);
                ok = true;
            }
        }
    
        if(has){
            vec.pb( node('D',x,y) );
            vec.pb( node('R',x,y) );
        }
    }
    
    int main(){
    
    #ifndef ONLINE_JUDGE
    	freopen("sum.in","r",stdin);
    	//freopen("sum.out","w",stdout);
    #endif
    
        int ncase = false;
        while(cin>>n>>m){
            vec.clear();
            ncase?puts(""):ncase = true;
            memset(use,false,sizeof(use));
            rep1(i,n)
                scanf("%s",s[i]+1);
    
            rep1(i,n)
                rep1(j,m)
                    if(s[i][j]=='.' && !use[i][j])
                        dfs(i,j,false);
            cout<<vec.size()<<endl;
            foreach(i,vec)
                printf("%c %d %d
    ",vec[i].op,vec[i].x,vec[i].y);
        }
    
    	return 0;
    }
    

      

     

  • 相关阅读:
    MySQL报错【innoDB is limited to rowlogging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED】
    【转】linux下解压命令大全
    java学习笔记
    【转】Linux安装MySQL tar文件
    Android部署及安装
    正则表达式各个符合含义
    [转]Linux下crontab命令的用法
    XTABLE学习笔记
    MySQL的mysqldump工具的基本用法
    java开发注意事项
  • 原文地址:https://www.cnblogs.com/yejinru/p/3172671.html
Copyright © 2011-2022 走看看