总结20220124

今天主要是做题,把周测的题目补完。

Correct Solution?

题目描述(舍弃各种乱七八糟的故事)

给定一个数NN,要求把NN的各个数位打乱,要求组成一个可能的,最小的数(最小数有可能含有前导00)。现在已经有一个“最小数”,请你判断这个“最小数”是不是最小数。

第一行输入n不含前导0。
第二行输入的假定的最小数可能含有前导0。 题目要求排序后的最小数不含前导0。

输入格式

两行。 第一行是给定的数NN。 第二行是假定的NN重组的“最小数”。

输出格式

一行。 如果输入的最小数就是NN重组的最小数,输出“OK”。 否则输出“WRONG_ANSWER”。

输入输出样例

输入 #1

3310
1033

输出 #1

OK

输入 #2

4
5

输出 #2

WRONG_ANSWER
#include<bits/stdc++.h>
using namespace std;
char s1[10000],s2[10000];
int main()
{
	int i;
	gets(s1);
	gets(s2);
	int len=strlen(s1);
	sort(s1,s1+len);
	for(i=0;i<len;i++){
		if(s1[0]!='0')break;
		if(s1[i]!='0'){
			swap(s1[i],s1[0]);
			break;
		}
	}
	if(strcmp(s1,s2)==0)cout<<"OK";
    else cout<<"WRONG_ANSWER";
    return 0;
}

Alice Wins! (easy version)

题意翻译

AB 每队 2n2n 人正在玩石头剪刀布。A 队第 ii 个人出 a_iai​,B 队第 ii 个人出 b_ibi​。编号相同的人会对战。若 A 队赢则加一分,平不得分,输扣一分。你可以至多改变每队 nn 个人的出拳方案,使得 A 队的得分最高。输出得分的最大值和任意一组构造方案。

本题中,我们用 11 代表石头,22 代表剪刀,33 代表布。

输入输出样例

输入 #1

2
1
1 2
1 2
2
2 3 1 3
1 2 2 1

输出 #1

2
1 1
2 2
4
3 1 1 3
1 2 2 1
#include<bits/stdc++.h>
using namespace std;
#define N 1000001
int a[N];
int b[N];
int c[N];
int main()
{
	int x,sum=0;
	scanf("%d",&x);
	for(int i=1;i<=x;i++){
		scanf("%d",&a[i]);
		for(int j=1;j<=a[i]*2;j++){
			scanf("%d",&b[j]);
		}
		for(int j=1;j<=a[i]*2;j++){
			scanf("%d",&c[j]);
		}
		for(int j=1;j<=a[i]*2;j++){
			if(sum<a[i]){
			if(b[j]==1&&c[j]==2||b[j]==3&&c[j]==1||b[j]==2&&c[j]==3)	continue;
			else if(b[j]==1&&c[j]==1){
				b[j]=3;
				sum++;
			}
			else if(b[j]==2&&c[j]==2){
				b[j]=1;
				sum++;
			}
			else if(b[j]==3&&c[j]==3){
				b[j]=2;
				sum++;
			}
			else if(b[j]==2&&c[j]==1){
				b[j]=3;
				sum++;
			}
			else if(b[j]==1&&c[j]==3){
				b[j]=2;
				sum++;
			}
			else if(b[j]==3&&c[j]==2){
				b[j]=1;
				sum++;
			}
		}
		else {
			if(b[j]==1&&c[j]==2||b[j]==3&&c[j]==1||b[j]==2&&c[j]==3)	continue;
			else if(b[j]==1&&c[j]==1)
				c[j]=2;
			
			else if(b[j]==2&&c[j]==2)
				c[j]=3;
			
			else if(b[j]==3&&c[j]==3)
				c[j]=1;
			
			else if(b[j]==2&&c[j]==1)
				c[j]=3;
				
			else if(b[j]==1&&c[j]==3)
				c[j]=2;
			
			else if(b[j]==3&&c[j]==2)
				c[j]=1;
			
		}
	}
		printf("%d\n",a[i]*2);
		for(int j=1;j<=a[i]*2;j++){
			printf("%d ",b[j]);
			if(j==a[i]*2)printf("\n");
		}
		for(int j=1;j<=a[i]*2;j++){
			printf("%d ",c[j]);
			if(j==a[i]*2)printf("\n");
		}
		sum=0;
	}
	return 0;
}

Triangle

题意翻译

题目描述

给定 44 根木棍的长度,如果它们中存在 33 根木棍可以组成三角形,输出 TRIANGLE ;如果它们无法组成三角形,但是它们中存在 33 根木棍可以组成退化的三角形(任意两边之和大于等于第三边,但是不是三角形),输出 SEGMENT ;否则,输出 IMPOSSIBLE 。

注意: 木棍不能折断,也不能只用一部分长度。

输入格式

一行 44 个整数,44 根木棍的长度。

输出格式

如果它们中存在 33 根木棍可以组成三角形,输出 TRIANGLE ;如果它们无法组成三角形,但是它们中存在3根木棍可以组成退化的三角形,输出 SEGMENT ;否则,输出 IMPOSSIBLE

输入输出样例

输入 #1

4 2 1 3

输出 #1

TRIANGLE

输入 #2

7 2 2 4

输出 #2

SEGMENT

输入 #3

3 5 9 1

输出 #3

IMPOSSIBLE
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[5];
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	sort(a,a+4);
	if(a[0]+a[1]>a[2]||a[1]+a[2]>a[3])cout<<"TRIANGLE";
	else if(a[0]+a[1]==a[2]||a[1]+a[2]==a[3])cout<<"SEGMENT";
	else cout<<"IMPOSSIBLE";
    return 0;
}

上一篇:买鸡问题(C语言)


下一篇:vue项目中enter触发搜索