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

    A. Pasha and Stick

    一直觉得自己理科学得不好,现在才发现英语也垃圾。。。rectangle是矩形不是三角形,rectangle是矩形不是三角形,rectangle是矩形不是三角形,triangle才是三角形!!!!晕。。。

    题意:

    给定木棍长度n,将其切成四部分,保证每部分长度为正整数,使他们能够构成矩形且不会构成正方形。

    分析:

    n为奇数时无法构成矩形,n为偶数时,除去重复的和四部分相等的情况,一共有(n/2-1)/2种可能。

    代码:

    #include<iostream>
    using namespace std;
    const int INF=0x3fffffff;
    int main (void)
    {
        long long n;
        cin>>n;
        if(n & 1) cout<<0<<endl;
        else  cout<<(n/2-1)/2<<endl;
        return 0;
    }
    

    B. Vika and Squares

    题意:

    给定一系列数,遍历一次元素值减一,当遍历到的元素值为0时,停止遍历,求可以遍历到的元素个数的最大值。

    分析:

    由题意可知至少可以遍历的元素个数为 数组中的最小值*数组元素个数 再加上最小值之间的距离最大值,即为所求。因为题中说明序列循环遍历,所以计算最小值距离时要注意序列末尾与开头相连。

    代码:

    #include<iostream>
    using namespace std;
    #define max(a,b) (a)>(b)?(a):(b)
    #define min(a,b) (a)<(b)?(a):(b)
    typedef long long ll;
    const int maxn=2000005;
    const int INF=0x3fffffff;
    ll a[maxn];
    int main (void)
    {
       int n;
       cin>>n;
       int p = 0;
       int maxs = 0;
       ll mins = INF;
       for(int i = 0; i < n; i++){
            cin>>a[i];
            a[i+n] = a[i];
            mins = min(mins,a[i]);
       }
        for(int i = 0; i < 2 * n; i++){
            if(a[i] > mins) p++;
            else {
                maxs = max(maxs,p);
                p = 0;
            }
        }
         cout<<n*mins+maxs<<endl;
    }
    

    C. Harmony Analysis

    题意:

    2k维空间中找出2k个两两正交的由-1,1组成的单位向量。

    分析:

    2k2k=42k12k1,利用分治思想,最终答案的2k2k矩阵可以分为四部分,即4个2k1矩阵,不停分下去直到k=1,向量正交则每次划分的四部分需满足为(1 , 1) (1,-1)。过程类似循环赛事表。

    代码;

    #include<iostream>
    using namespace std;
    const int maxn=2005;
    char a[maxn][maxn];
    int main (void)
    {
        int k;
        cin>>k;
        a[1][1]='+';
        int n = 1<<k;
        int n1 =n>>1;
    
        for(int m = 1; m <= n1; m<<=1){
             for(int i = 1; i <= m; i++){
                for(int j = m+1; j <= m<<1; j++){
                    a[j][i] = a[i][j] = a[i][j-m];
                    if(a[i][j-m]=='+') a[j][i+m]='*';
                    else a[j][i+m]='+';
                }
            }
        }
    
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                cout<<a[i][j];
            }
            cout<<endl;
        }
    }
    
  • 相关阅读:
    ubuntu 从零安装tf-serving环境和opencv
    tensorflow pip install 安装指定版本的包并指定安装源(速度会快很多)
    Generative Adversarial Networks,gan论文的畅想
    ubuntu16 安装openssh-server 一直安装不上Unable to correct problems, you have held broken packages
    点乘(内积)和叉乘(外积、向量积)
    Ubuntu中清理Network下Connect to Server的入口
    tensorflow 之tensorboard 对比不同超参数训练结果
    tensorflow 高级api使用分布式之配置
    python opencv3 给图片加中文
    关于scp在zsh报错:zsh:no matches found :
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758851.html
Copyright © 2011-2022 走看看