zoukankan      html  css  js  c++  java
  • CF 191 div2

    A.数据量很小,直接爆搞。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string>
    #include <cmath>
    #include <cstring>
    #include <queue>
    #include <set>
    #include <vector>
    #include <stack>
    #include <map>
    #include <iomanip>
    #define PI acos(-1.0)
    #define Max 2505
    #define inf 1<<28
    #define LL(x) ( x << 1 )
    #define RR(x) ( x << 1 | 1 )
    #define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mp(a,b) make_pair(a,b)
    #define PII pair<int,int>
    using namespace std;
    
    int a[111] ;
    int num[11111] ;
    int main() {
    
        int n ;
        cin >> n ;
        int ans = 0 ;
        for (int i = 1 ; i <= n ;i ++ ){
            cin >> a[i] ;
            num[i] = num[i - 1] + a[i] ;
        }
        ans = num[n] - 1 ;
         for(int i = 1; i <= n; ++i ){
            for(int j = 1; j <= i; ++ j){
                int sum = num[n] - 2 * ( num[i] - num[j-1] ) + ( i - j + 1  );
                ans = max(sum ,ans) ;
            }
         }
        cout << ans << endl;
    
    
        return 0 ;
    }
    

    B,直接打个素数表,然后输出前N个素数就可以了。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string>
    #include <cmath>
    #include <cstring>
    #include <queue>
    #include <set>
    #include <vector>
    #include <stack>
    #include <map>
    #include <iomanip>
    #define PI acos(-1.0)
    #define Max 2505
    #define inf 1<<28
    #define LL(x) ( x << 1 )
    #define RR(x) ( x << 1 | 1 )
    #define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mp(a,b) make_pair(a,b)
    #define PII pair<int,int>
    using namespace std;
    
    bool flag[11111111] ;
    void prime(){
        flag[0] = 1 ;
        flag[1] = 1 ;
        flag[2] = 0 ;
        for (int i = 2 ;i <= 1300000 ; i ++ ){
            if(!flag[i]){
                for (int j = 2 * i ;j <= 1300000 ;j += i){
                    flag[j] = 1 ;
                }
            }
        }
    }
    int a[111] ;
    int num[1111111] ;
    int main() {
        prime() ;
        int nn = 0 ;
        for (int i = 2 ;i <= 1300000 ;i ++ ){
            if(!flag[i])num[nn ++ ] = i ;
        }
        int n ;
        cin >> n ;
        cout << num[0] ;
        for (int i = 1 ;i < n ;i ++ ){
            printf(" %d",num[i]) ;
        }
        cout << endl;
        return 0 ;
    }
    

    C,可以推出,k个连续的字符串是满足等比数列的关系的。

    所以我们只需求出a1 和比例q就可以了。

    首相就是只有一个字符串的时候,所有的删除的总和。

    q就是pow(2 , l),l是字符串的长度。

    等比数列求和公式 (a1 * (q ^ n - 1)) / (q - 1)%MOD 。先将a1 拿到外面去,不参与计算。我们设q ^ n - 1为a ,q - 1 为b 。那么式子就变成a / b %MOD 。这就变成很熟悉的拓展欧几里德了,先求出b % MOD的逆元x . x * b % MOD  = 1 ,那么 (a / b ) %MOD * (x * b) % MOD 的值不变,那么可以将式子化简成(a * x) % MOD 。

    最后再将a1乘上即可。

    #define MOD 1000000007
    
    char a[111111] ;
    
    inline ll extend_gcd(ll a ,ll b , ll& x , ll& y){
        ll ans , t ;
        if(b == 0){
            x = 1 ;
            y = 0 ;
            return a ;
        }
        ans = extend_gcd(b , a % b ,x ,y ) ;
        t = x ;
        x = y ;
        y = t - (a / b) * y ;
        return ans ;
    }
    
    
    ll quick_pow(ll a ,ll b , ll M){
        ll ret = 1 ;
        ll temp = a ;
        while(b){
            if(b & 1){
                ret = (ret * temp) % M ;
            }
            temp = (temp * temp) % M  ;
            b >>= 1 ;
        }
        return ret ;
    }
    int main(){
        cin >> a ;
        int k ;
        cin >> k ;
        int l = strlen(a) ;
        ll a1 = 0 ;
        REP(i , 0 ,l - 1 ){
             if(a[i] == '0' || a[i] == '5'){
                a1 = (a1 + quick_pow(2 ,i ,MOD)) % MOD ;
            }
        }
        ll a = quick_pow(2 , l ,MOD) ;
        ll aa = (a - 1 + MOD) % MOD ;
        ll x , y ;
        extend_gcd(aa ,MOD , x ,y) ;
        x = (x + MOD) % MOD ;
        ll c = (quick_pow(a , k  ,MOD) - 1) * x % MOD ;
        ll ans = c * a1 % MOD ;
        cout << ans << endl;
        return 0 ;
    }


    D,DFS,每次进入一个空地,先将他建成蓝色的,然后向四个方向DFS,最后回溯的时候将这个蓝色的建筑拆掉建成红色的,当然第一个进入的点是不能建成红色的。

    这个很容易证明,一个联通块里面,肯定有一个是蓝色的,其他都是红色的。


    int n , m ;
    char op[11111111] ;
    int xx[11111111] ;
    int yy[11111111] ;
    int ss[555][555] ;
    char Map[555][555] ;
    int num = 0 ;
    void dfs(int x ,int y ,int first ) {
        if(x < 1 || x > n || y < 1 || y > m)return ;
        op[num] = 'B' ;
        xx[num] =  x ;
        yy[num] = y ;
        num ++ ;
        ss[x][y] = 0 ;
        if(ss[x - 1][y])dfs(x - 1 ,y , 1) ;
        if(ss[x][y - 1])dfs(x ,y - 1 ,1 ) ;
        if(ss[x + 1][y])dfs(x + 1 ,y , 1) ;
        if(ss[x][y + 1])dfs(x ,y + 1 ,1 ) ;
        if(first) {
            op[num] = 'D' ;
            xx[num] = x ;
            yy[num] = y ;
            num ++ ;
            op[num] = 'R' ;
            xx[num] = x ;
            yy[num] = y ;
            num ++ ;
        }
    }
    int main() {
        cin >> n >> m ;
        for (int i = 1 ; i <= n ; i ++ ) {
            for (int j = 1 ; j <= m ; j ++ ) {
                cin >> Map[i][j] ;
                if(Map[i][j] == '.') {
                    ss[i][j] = 1 ;
                }
            }
        }
        for (int i = 1 ; i <= n ; i ++ ) {
            for (int j = 1 ; j <= m ; j ++ ) {
                if(ss[i][j]) {
                    dfs(i ,j , 0 ) ;
                }
            }
        }
        cout << num << endl;
        for (int i = 0 ; i < num ; i ++ ) {
            cout << op[i] << " " << xx[i] << " " << yy[i] << endl;
        }
        return 0 ;
    }

    E。状态压缩DP。

    枚举1<< 24的状态。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string>
    #include <cmath>
    #include <cstring>
    #include <queue>
    #include <set>
    #include <vector>
    #include <stack>
    #include <map>
    #include <iomanip>
    #define PI acos(-1.0)
    #define Max 2505
    #define inf 1<<28
    #define LL(x) ( x << 1 )
    #define RR(x) ( x << 1 | 1 )
    #define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mp(a,b) make_pair(a,b)
    #define PII pair<int,int>
    using namespace std;
    
    #define MOD 1000000007
    
    inline void RD(int &ret) {
        char c;
        do {
            c = getchar();
        } while(c < '0' || c > '9') ;
        ret = c - '0';
        while((c=getchar()) >= '0' && c <= '9')
            ret = ret * 10 + ( c - '0' );
    }
    
    int a[111111] ;
    int sum[1 << 24] ;
    int dp[1 << 24] ;
    int k[11] ;
    
    int main(){
    
        int n ;
        cin >> n  ;
        for (int i = 0 ;i < n ; i ++ ){
            RD(a[i]) ;
        }
    
        int m ;
        cin >> m ;
        for (int i = 0 ;i < m ;i ++ ){
            RD(k[i]) ;
        }
        dp[0] = 1 ;
        for (int i = 1 ;i < (1 << n) ; ++ i){//枚举当前路径
            int pos ;
            bool flag = 0 ;
            sum[i] = 0 ;
            for (int j = 0 ;j < n ;j ++ ){
                if(i & (1 << j)){//i 在 j 这点为1 ,直接在这里找出sum[i]的值会T。O(2 ^ 24 *  n)
                    pos = j ;//一开始我直接写sum[i] += a[j] ;就T了
                    break ;
                }
            }
            sum[i] = sum[i ^ (1 << pos)] + a[pos] ;//i 状态的所有步数。
            for (int j = 0 ; j < m ;j ++ ){//i状态的步数是否不能走。
                if(sum[i] == k[j]){
                    dp[i] = 0 ;
                    flag = 1 ;
                    break ;
                }
            }
            if(flag)continue ;
            dp[i] = 0 ;
            for (int j = 0 ;j < n ;j ++ ){
                if(i & (1 << j)){//i 这位可以由i ^ (1 << j )这一状态过来。
                    dp[i] = (dp[i] + dp[i ^ (1 << j)]) ;
                    if(dp[i] >= MOD)dp[i] -= MOD ;
                }
            }
        }
    
        cout << dp[(1 << n) - 1] << endl;
        return 0 ;
    }
    





  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3202918.html
Copyright © 2011-2022 走看看