今天主要是做题,把周测的题目补完。
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;
}