2020-05-22 习题训练二
Posted emhhbw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-05-22 习题训练二相关的知识,希望对你有一定的参考价值。
题目链接: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; } }
题目链接: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; } }
题目链接: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; }
题目链接: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 习题训练二的主要内容,如果未能解决你的问题,请参考以下文章
GauGAN发布第二代!训练超1000万张图片,两个词就能生成风景画