题目链接:
传送门
A 抗疫必胜1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int t, n, k;
int main() {
printf("V V\n");
printf(" V V\n");
printf(" V V\n");
printf(" V \n");
}
直接输出即可
B 疫情死亡率
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
double n, m;
int main() {
scanf("%lf%lf", &n, &m);
printf("%.3lf\%\n", m / (n) * 100);
}
根据定义直接除即可
C 整除判断
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int n, m;
int main() {
scanf("%d%d", &n, &m);
if(n % m == 0) puts("YES");
else puts("NO");
}
直接求余即可
D 编程时间
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int h1, h2, m1, m2;
int main() {
scanf("%d%d%d%d", &h1, &m1,&h2, &m2);
int ans = (h2 - h1) * 60 + (m2 - m1);
printf("%d %d\n", ans / 60, ans % 60);
}
做差输出时间
E 双位彩
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int n, m;
int main() {
scanf("%d%d", &n, &m);
if(n == m) puts("100");
else if(n / 10 == m % 10 && n % 10 == m / 10) puts("20");
else if(n / 10 == m % 10 || n % 10 == m / 10 || n / 10 == m / 10 || n % 10 == m % 10) puts("2");
else puts("0");
}
根据题意分情况讨论
F 抗疫必胜2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int n, m;
int main() {
scanf("%d%d", &n);
while(n--) {
puts("China will win the battle against COVID-19.");
}
}
按要求输出即可
G 成绩统计
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
double n, tmp, mx, mn = 1e7, sum;
int main() {
scanf("%lf", &n);
for(int i = 0; i < n ; i++) {
scanf("%lf", &tmp);
mx = max(tmp, mx);
mn = min(tmp, mn);
sum += tmp;
}
printf("%.2lf %.0lf %.0lf\n", sum / n, mx, mn);
}
维护最大最小值和总和,最后输出即可
H 抗疫必胜3
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int n, m;
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
for(int j = 0; j < 2 * n; j++) {
if(j == i || j == 2 * n - i - 2) printf("V");
else printf(" ");
}
printf("\n");
}
}
根据题意输出即可
I 统计数据
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int n, cnt[N], mx, tmp;
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &tmp);
mx = max(tmp, mx);
cnt[tmp]++;
}
for(int i = mx; i > 0; i--) {
if(cnt[i])
printf("%d-%d\n", i, cnt[i]);
}
}
用一个数组统计数据个数,同时维护最大值的大小然后从最大值往下又出现就输出,没出现就跳过
J 子序列求和
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
int p, q, t, n, sum[N], mx, tmp;
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &tmp);
sum[i] = sum[i - 1] + tmp;
}
scanf("%d", &t);
while(t--) {
scanf("%d%d", &p, &q);
if(n < p && p <= q) puts("0");
else printf("%d\n", sum[min(n, q)] - sum[p - 1]);
}
}
这道题可以用前缀和维护,然后根据题意输出即可
K Simple Question
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;
ll n, m, k, tmp;
ll gcd(ll a, ll b) {
return !b ? a : gcd(b, a % b);
}
int main() {
scanf("%lld%lld%lld", &n, &m, &k);
ll mul = (n * m) / gcd(n, m);
if(mul > k) {
printf("-1\n");
}
else {
tmp = k % mul;
printf("%lld\n", k - tmp);
}
}
求最小公倍数,然后求余得到的值减去原来的k即为答案。
L Wrong Word
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 26;
string str;
int le[26], n;
int f(int n) {
int tmp = 1;
for(int i = 1; i <= n; i++) {
tmp *= i;
}
return tmp;
}
int main() {
cin >> str;
n = str.size();
for(int i = 0; i <= n; i++) {
le[str[i] - 'A']++;
}
int ans = f(n);
for(int i = 0; i < 26; i++) {
if(le[i]) {
ans /= f(le[i]);
}
}
printf("%d\n", ans - 1);
}
排列组合,全排列去重,最后减去本身即为答案。
M Mutable Array
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 26;
ll mn, mx, n;
int main() {
scanf("%lld%lld%lld", &n, &mn, &mx);
if(mn == mx) puts("1");
else {
ll ex = (mx - mn) * (n - 2);
ll ans = 1 + ex;
printf("%lld\n", ans);
}
}
找到和可能的最大值和最小值,然后做差 + 1即为答案。
N Interesting Number
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 1000010;
bool isprime[N];
ll prime[N], x, n;
void oulashai()
{
for (ll i = 2; i <= N; i++)
{
if (!isprime[i]) prime[x++] = i;
for (ll j = 0; j < x; j++)
{
if (i * prime[j] > N) break;
isprime[i * prime[j]] = true;
if (i % prime[j] == 0) break;
}
}
}
int main() {
oulashai();
scanf("%lld", &n);
ll ans = 0;
while (ans <= x && prime[ans] * prime[ans] <= n) ans++;
printf("%lld\n", ans);
}
欧拉筛找出所有的质数,然后找出小于等于n的素数的平方的个数
O Find Difference
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
ll n;
int main() {
scanf("%lld", &n);
printf("%lld\n", n == 1 ? 0 : 1);
}
这道题比较神奇,我们可以把所有堆经行编号,每堆抽取与当前编号数字相等个硬币,合在一起称,正常情况下这堆硬币的重量是(1 + n) * n / 2,如果此时某堆的质量为2,那么总和就会多出k的重量,而这个重量即为那一堆的编号。
P Dismantling Number
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<bitset>
#define ll long long
using namespace std;
ll n;
int main(){
scanf("%lld", &n);
for(int i = 1; i < 30; i++){
for(int j = i; j < 30; j++){
for(int k = j; k < 30; k++){
if(((1 << i) + (1 << j) + (1 << k)) == n){
puts("YES");
return 0;
}
}
}
}
puts("NO");
}
这道题暴力枚举即可
Q Finite Decimal
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int n, tmp;
bool judge(int n) {
if(n == 1) return 1;
else if(n % 2 == 0) return judge(n / 2);
else if(n % 5 == 0) return judge(n / 5);
else return 0;
}
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &tmp);
if(judge(tmp)) puts("YES");
else puts("NO");
}
}
判断一下当前数字的因子是否只包含2和5即可
R Take Apples
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
ll n, tar;
int main() {
scanf("%lld", &n);
for(int i = 0; i < n; i++) {
ll sum = 0;
scanf("%lld", &tar);
for(ll i = 2; sum < tar; i++) {
sum += i;
}
if(sum == tar) puts("YES");
else puts("NO");
}
}
这道题目类似于巴什博弈,但是每轮的拿法有所不同,所以只要当前数是由2到k(k为任意大于2的数)的和,那么这个局面下就可以胜利。