标签:fine bre while lan else ace highlight 奇数 开始
A - Candies
1.题意
给定一个正整数n,求一个正整数x使得x + 2 * x + 4 * x + ······ + 2 ^ (k - 1) * x = n(k > 1)。
2.题解
用等比数列的求和公式化简为 (2 ^ k - 1)* x = n,乘方可以用快速幂,再从2开始枚举k即可。
3.代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll qpow(ll a, ll n){
ll ans = 1;
while(n) {
if(n & 1)
ans *= a;
a *= a;
n >>= 1;
}
return ans;
}
int main() {
int t;
cin >> t;
while(t--) {
ll n;
cin >> n;
for(int i = 2; ; i++) {
int qp = (qpow(2, i) - 1);
if(n % qp == 0) {
cout <<n / qp << endl;
break;
}
}
}
return 0;
}
B - Balanced Array
1.题意
给定一个偶数n,要求构造一个长度为n的数列满足:前n / 2的数字之和等于后n / 2的数字之和,且前n / 2的数字全为偶数,后n / 2的数字全为奇数。
2.题解
举例发现,当n % 4 = 2时,无解。因为n是偶数,n % 4 只能等于0或2,当等于2时,说明n / 2是奇数,前n / 2个偶数之和是偶数,后n / 2个奇数之和为奇数,显然不满足条件。当n % 4 = 0时,n / 2是偶数,让数列前半部分每个数都比后半部分对应的每个数大1,最后一个数补回来即可。
3.代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t;
int main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
if(n % 4 == 2) {
cout << "NO" <<endl;
} else {
cout << "YES" <<endl;
for(int i = 1; i <= n / 2; i++) {
if(i == 1) {
cout << 2;
} else {
cout << ‘ ‘ << 2 * i;
}
}
for(int i = 1; i < n / 2; i++) {
cout << ‘ ‘ << (2 * i - 1);
}
int fin = 2 * (n / 2) + (n / 2 - 1);
cout << ‘ ‘ << fin << endl;
}
}
return 0;
}
C - Ichihime and Triangle
1.题意
给定a,b,c,d四个正整数,满足a <= b <= c <= d,要求挑出x,y,z三个数(a <= x <= b,b <= y <= c,c <= z <= d)作为边长组成一个三角形。
2.题解
三角形满足任意两边之和大于第三边,所以让x = b,y = c,z = c即可。
3.代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t;
int main() {
int t;
cin >> t;
while(t--) {
ll a, b, c, d;
cin >> a >> b >> c >> d;
cout<< b << ‘ ‘ << c << ‘ ‘ << c << endl;
}
return 0;
}
标签:fine bre while lan else ace highlight 奇数 开始
原文地址:https://www.cnblogs.com/lvguapi/p/12943524.html