VJ20210504

此文按照写题顺序进行整理

504)

H : Fashion in Berland

原题链接
人性化链接
下面先来一个正解

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, k = 0;
    scanf("%d",&n);
    int a[n];
    for(int i = 0; i < n; i ++){
        scanf("%d",&a[i]);
    }
    if(n == 1){
        if(a[0] == 1)printf("YES");
        else{
            printf("NO");
        }
    }
    else{
        for(int i = 0; i < n ; i ++){
            if(a[i] == 0)k ++;
        }
        if(k == 1 )printf("YES");
        else{
            printf("NO");
        }
    }
    return 0;
}

接下来就是第一次提交的错误代码
(第21行,因为加入了自己的推测,还是根据题意考虑问题吧,做个听话的人)

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, k = 0;
    scanf("%d",&n);
    int a[n];
    for(int i = 0; i < n; i ++){
        scanf("%d",&a[i]);
    }
    if(n == 1){
        if(a[0] == 1)printf("YES");
        else{
            printf("NO");
        }
    }
    else{
        for(int i = 0; i < n ; i ++){
            if(a[i] == 0)k ++;
        }
        if(k == 1 || k == 0)printf("YES");
        else{
            printf("NO");
        }
    }
    return 0;
}

G:Anton and Danik

原题链接
人性题干链接
一遍AC

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int a = 0, d = 0;
    for(int i = 0; i < n; i ++){
        char s;
        cin >> s;
        if(s == 'A')a ++;
        else if(s == 'D')d ++;
    }

    if(a > d)printf("Anton");
    else if(a < d)printf("Danik");
    else{
        printf("Friendship");
    }
    return 0;
}

虽然是一遍过,but 就是发现对于char和string的运用不是很熟悉,char是字符,string是字符串,用cin读入就可以了。(用cin是因为不用区分字符还是字符串,也不用区分是c还是s)

F : Vladik and flights

原题链接
人性化链接
一遍过

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b;
    scanf("%d%d%d",&n,&a,&b);
    char s[n];
    for(int i = 0; i < n; i ++)cin >> s[i];
    if(s[a-1] == s[b-1])printf("0");
    else
        printf("1");
    return 0;
}

E:Little Artem and Presents

原题链接
人性化链接
先写一下AC的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    if(n == 1)printf("1");
    else if(n == 2)printf("1");
    else{
        if(n % 3 == 0)printf("%d",n/3 * 2);
        else{
            printf("%d",n/3 * 2 + 1);
        }
    }
    return 0;
}

下面是第一次交的时候没有过的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    if(n == 1)printf("1");
    else if(n == 2)printf("1");
    else{
        if(n % 3 == 0)printf("%d",2 * n / 3);
        else{
            printf("%d",2 * n  / 3 + 1);
        }
    }
    return 0;
}

就是关于运算的问题了,
没有通过的样例是

Input:
101
Answer:
68

就是除过3之后的问题了,dddd
对于是三的倍数的数可以分成n/3个1和2
如果不是3的倍数,在前面加2或者后面加1即可

C: Anton and Polyhedrons

原题链接
人性链接
这是AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int s = 0;
    string c;
    while(n --){
        cin >> c;
        if(c[0] == 'T')s += 4;
        else if(c[0] == 'C') s += 6;
        else if(c[0] == 'O') s += 8;
        else if(c[0] == 'D') s += 12;
        else if(c[0] == 'I') s += 20;
    }
    cout << s;
    return 0;
}

大概的错误就是关于字符和字符串的运用的判断
本人天真的以为如果直接c == 'T'判断的是c的首部,其实不是。

B:Brain’s Photos

原题链接
人性链接

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	char c;
	scanf("%d%d",&a,&b);
	for(int i = 1; i <= a * b; i ++)
	{
		cin>>c;
		if( c == 'C' || c == 'M' || c == 'Y')
		{
			printf("#Color");
			return 0;
		}
	}
	printf("#Black&White");
	return 0;
}

D:Neverending competitions

原题链接
人性链接
因为他每次都是从家出发,之后去赛场,之后再回家,再去赛场。
就可以直接判断航班数,如果航班数是2的倍数,那么就是在家,如果不是,那就是在赛场

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    string s;
    cin >> s;
    string a;
    for(int i = 0; i < n; i ++){
        cin >> a;
    }
    if(n%2 == 0)printf("home");
    else{
        printf("contest");
    }
    return 0;
}

A:The Modcrab

原题链接
人性连接
推那五个数据的关系就好了

第一次的错误代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int h1,a1,c1,h2,a2;
	scanf("%d%d%d",&h1,&a1,&c1);
	scanf("%d%d",&h2,&a2);
	int k = 0;
	int sn,hn;
	for(int s = 0;; s ++){
		if(s*a1>=h2){
			sn = s;
			break;
		}
	}

	for(int h = 0;; h ++){
		if(h1 - (sn + h)*a2 + h*c1 > 0){
			hn = h;
			break;
		}
	}

	printf("%d\n",sn+hn);
	for(int i = 0; i < hn; i ++){
		printf("HEAL\n");
	}
	for(int i = 0; i < sn; i ++){
		printf("STRIKE\n");
	}
	return 0;
}

没有通过的样例是

INPUT
25 27 91 
10 87

ANSWER
1
STRIKE

之后就是换了一下每个数据的关系,重新算,就得出的关系

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int h1,a1,c1,h2,a2,k = 0;
    int s = 0;
    int h = 0;
    scanf("%d%d%d",&h1,&a1,&c1);
    scanf("%d%d",&h2,&a2);
    while(h2 > 0){
        if(h2 <= a1){
            s += 1;
            h2 -= a1;
        }
        else if(h1 <= a2){
            h += 1;
            h1 += (c1 - a2);
        }
        else{
            s += 1;
            h1 -= a2;
            h2 -= a1;
        }
        k ++;
    }
    printf("%d\n",k);
    for(int i = 0; i < h; i ++){
        printf("HEAL\n");
    }
    for(int i = 0; i < s; i ++){
        printf("STRIKE\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值