2020-05-22 习题训练二

Posted emhhbw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-05-22 习题训练二相关的知识,希望对你有一定的参考价值。

题目:Candies

题目链接:https://vjudge.net/problem/CodeForces-1343A

思路:

  其实就是把给出的式子等比数列求和整理一下,便可求出x。

解题代码:

//        .--------------.
//        | Try First One|
//        ‘--------------‘
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |
//              ‘--------------‘    |  |
//              (True)|  |(False)   |  |
//           .--------‘  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----‘  |
//           |  ‘--------------‘       |
//           |                         |
//           |  .--------------.       |
//           ‘->| Try Next One |-------‘
//              ‘--------------‘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const long long N = 1e10 + 7;
const int maxn = 2e5 + 5;
const long long INF = 8e18;
typedef long long ll;
#define for0(i,n) for(int i = 0;i < n;i++)
#define for1(i,n) for(int i = 1;i <= n;i++)
int main()
{
    int t;
    cin >> t;
    while(t--){
        int n,num,k = 2;
        cin >> n;
        while(1){
            num = pow(2,k++) - 1;
            if(n % num == 0)
                break;
        }
        cout << n/num << endl;
    }
    return 0;
}

题目Balanced Array

题目链接:https://vjudge.net/problem/CodeForces-1343B

思路:

  给出一个n(为偶数), 要你构造一个前n/2个数为偶数,后n/2个数为奇数,且前后两部分的和相同的数列,若不能构造则输出NO。其实就可以想到相邻的两数就是一奇一偶,相差为1,这样就可以先从2开始输出 n/2 个依次递增的偶数,再从1开始输出 n/2-1 个依次递增的奇数,这时最后一个数就是( n-1 + n/2) 然而就需要判断这个数是否为奇数(即判断n是否能被4整除)。

解题代码:

//        .--------------.
//        | Try First One|
//        ‘--------------‘
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |
//              ‘--------------‘    |  |
//              (True)|  |(False)   |  |
//           .--------‘  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----‘  |
//           |  ‘--------------‘       |
//           |                         |
//           |  .--------------.       |
//           ‘->| Try Next One |-------‘
//              ‘--------------‘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const long long N = 1e10 + 7;
const int maxn = 2e5 + 5;
const long long INF = 8e18;
typedef long long ll;
#define for0(i,n) for(int i = 0;i < n;i++)
#define for1(i,n) for(int i = 1;i <= n;i++)
int main()
{
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        if(n % 4 == 0){
            cout << "YES" << endl;
            for1(i,n/2){
                cout << 2*i << " ";
            }
            for(int i = 1;i < n/2 ;i++){
                cout << 2*i-1 << " ";
            }
            cout << n-1 + n/2 << endl;
        }
        else{
            cout << "NO" << endl;

        }
    }
}

题目Ichihime and Triangle

题目链接:https://vjudge.net/problem/CodeForces-1337A

思路:

  给出三个数的范围,找出一组能够组成三角形的情况,题目保证答案存在,所以只要通过较小的两边之和大于第三边就可,所以最大化两个小边,最小化第三边。

解题代码:

//        .--------------.
//        | Try First One|
//        ‘--------------‘
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |
//              ‘--------------‘    |  |
//              (True)|  |(False)   |  |
//           .--------‘  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----‘  |
//           |  ‘--------------‘       |
//           |                         |
//           |  .--------------.       |
//           ‘->| Try Next One |-------‘
//              ‘--------------‘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const long long N = 1e10 + 7;
const int maxn = 2e5 + 5;
const long long INF = 8e18;
typedef long long ll;
#define for0(i,n) for(int i = 0;i < n;i++)
#define for1(i,n) for(int i = 1;i <= n;i++)
int main()
{
    int t;
    cin >> t;
    while(t--){
        int a,b,c,d;
        cin >> a >> b >> c >> d;
        cout << b << " " << c << " " << c << endl;
    }
}

题目:Kana and Dragon Quest game

题目链接:https://vjudge.net/problem/CodeForces-1337B

思路:

  可以先尽可能的用第一种操作(负收益时停止),再进行第二种操作,看最后血量是否可为0.

解题代码:

//        .--------------.
//        | Try First One|
//        ‘--------------‘
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |
//              ‘--------------‘    |  |
//              (True)|  |(False)   |  |
//           .--------‘  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----‘  |
//           |  ‘--------------‘       |
//           |                         |
//           |  .--------------.       |
//           ‘->| Try Next One |-------‘
//              ‘--------------‘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const long long N = 1e10 + 7;
const int maxn = 2e5 + 5;
const long long INF = 8e18;
typedef long long ll;
#define for0(i,n) for(int i = 0;i < n;i++)
#define for1(i,n) for(int i = 1;i <= n;i++)
int main()
{
    int t;
    cin >> t;
    while(t--){
       int n,x,m;
       cin >> n >> x >> m;
       for0(i,x){
            int num = 0;
           // if(n%2)
           //     num++;
            num += (n/2 + 10);
            if(num < n)
                n = num;
            else
                break;
       }
 
       if(n > m*10)
            cout << "NO" << endl;
       else
            cout << "YES" << endl;
    }
}

题目:Candies and Two Sisters

题目链接:https://vjudge.net/problem/CodeForces-1335A

思路:

  两姐妹分n块糖Alice要比Betty分的糖多且两人都能分到糖,问有多少种方法,其实通过分析样例便可得出有(n-1)/ 2 种方法。

解题代码:

//        .--------------.
//        | Try First One|
//        ‘--------------‘
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |
//              ‘--------------‘    |  |
//              (True)|  |(False)   |  |
//           .--------‘  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----‘  |
//           |  ‘--------------‘       |
//           |                         |
//           |  .--------------.       |
//           ‘->| Try Next One |-------‘
//              ‘--------------‘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const long long N = 1e10 + 7;
const int maxn = 2e5 + 5;
const long long INF = 8e18;
typedef long long ll;
#define for0(i,n) for(int i = 0;i < n;i++)
#define for1(i,n) for(int i = 1;i <= n;i++)
int main()
{
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        cout << (n-1)/2 << endl;
    }
    return 0;
}

题目:Construct the String

题目链接:https://vjudge.net/problem/CodeForces-1335B

思路:

  构造一个长度为n的串,使得其中任意长度为a的子串中有b个不相同的字母,这里可以想到从 ‘a’ 开始每当输出b个字母后一定不能再输出不相同的字母了此时就从 ‘a’ 开始循环输出就可,构造出一个任意长度为b的子串中有b个不相同的字母,完全是符合题意的。

解题代码:

//        .--------------.
//        | Try First One|
//        ‘--------------‘
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |
//              ‘--------------‘    |  |
//              (True)|  |(False)   |  |
//           .--------‘  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----‘  |
//           |  ‘--------------‘       |
//           |                         |
//           |  .--------------.       |
//           ‘->| Try Next One |-------‘
//              ‘--------------‘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const long long N = 1e10 + 7;
const int maxn = 2e5 + 5;
const long long INF = 8e18;
typedef long long ll;
#define for0(i,n) for(int i = 0;i < n;i++)
#define for1(i,n) for(int i = 1;i <= n;i++)
int main()
{
    int t;
    cin >> t;
    while(t--){
        int n,a,b;
        cin >> n >> a >> b;
        for0(i,n){
            cout << (char)(a + i % b);
        }
        cout << endl;
    }
    return 0;
}

 

以上是关于2020-05-22 习题训练二的主要内容,如果未能解决你的问题,请参考以下文章

2020-05-22 — 习题训练二

2020-05-22 — 习题训练二

燧原科技首发国内第二代人工智能训练芯片“邃思2.0”

GauGAN发布第二代!训练超1000万张图片,两个词就能生成风景画

GauGAN发布第二代!训练超1000万张图片,两个词就能生成风景画

OpenGL基础学习之二代码基本结构