8:30~9:00
听一篇英语听力。
9:00~10:00
看啊哈算法里面的树和二叉树
10:00~11:00在B站继续学习树 以下为链接
11:00~12:00
因为今天要教妹妹做一张英语试卷,所以自己先做了一遍
12:00~14:30
教妹妹做英语试卷
13:00~15:00
做洛谷里面的测试
第一题:
CF6A Triangle
题目描述
Johnny has a younger sister Anne, who is very clever and smart. As she came home from the kindergarten, she told his brother about the task that her kindergartener asked her to solve. The task was just to construct a triangle out of four sticks of different colours. Naturally, one of the sticks is extra. It is not allowed to break the sticks or use their partial length. Anne has perfectly solved this task, now she is asking Johnny to do the same.
The boy answered that he would cope with it without any difficulty. However, after a while he found out that different tricky things can occur. It can happen that it is impossible to construct a triangle of a positive area, but it is possible to construct a degenerate triangle. It can be so, that it is impossible to construct a degenerate triangle even. As Johnny is very lazy, he does not want to consider such a big amount of cases, he asks you to help him.
输入格式
The first line of the input contains four space-separated positive integer numbers not exceeding 100 — lengthes of the sticks.
输出格式
Output TRIANGLE if it is possible to construct a non-degenerate triangle. Output SEGMENT if the first case cannot take place and it is possible to construct a degenerate triangle. Output IMPOSSIBLE if it is impossible to construct any triangle. Remember that you are to use three sticks. It is not allowed to break the sticks or use their partial length.
题意翻译
题目描述
给定 44 根木棍的长度,如果它们中存在 33 根木棍可以组成三角形,输出 TRIANGLE
;如果它们无法组成三角形,但是它们中存在 33 根木棍可以组成退化的三角形(任意两边之和大于等于第三边,但是不是三角形),输出 SEGMENT
;否则,输出 IMPOSSIBLE
。
注意: 木棍不能折断,也不能只用一部分长度。
输入格式
一行 44 个整数,44 根木棍的长度。
输出格式
如果它们中存在 33 根木棍可以组成三角形,输出 TRIANGLE
;如果它们无法组成三角形,但是它们中存在3根木棍可以组成退化的三角形,输出 SEGMENT
;否则,输出 IMPOSSIBLE
。
By @PC_DOS
输入输出样例
输入 #1复制
4 2 1 3
输出 #1复制
TRIANGLE
输入 #2复制
7 2 2 4
输出 #2复制
SEGMENT
输入 #3复制
3 5 9 1
输出 #3复制
IMPOSSIBLE
解题思路:比较简单的dfs回溯把所有的两条边加起来和第三条边比较情况全部判断一次,但是一定要注意满足三角形的情况的时候不能return 而是要exit(0)(一开始错了很快就找出了错误)。
AC代码:
#include<bits/stdc++.h>
int a[10];
int b[10]= {0};
int flag=0;
bool vis[10];
void dfs(int x)
{
if(x==4)
{
if(b[1]+b[2]>b[3]&&b[1]+b[3]>b[2]&&b[2]+b[3]>b[1] )
{
flag=2;
printf("TRIANGLE");
exit(0);
}
if(b[1]+b[2]>=b[3]&&b[1]+b[3]>=b[2]&&b[2]+b[3]>=b[1] )
flag=1;
return ;
}
for(int i=1; i<=4; i++)
{
if(vis[i]==0)
{
vis[i]=1;
b[x]=a[i];
dfs(x+1);
b[x]=0;
vis[i]=0;
}
}
}
int main()
{
for(int i=1; i<=4; i++)
scanf("%d",a+i);
dfs(1);
if(flag==2)
printf("TRIANGLE");
else if(flag==1)
printf("SEGMENT");
else printf("IMPOSSIBLE");
}
第二题:
CF9A
小Y,小W和小D进行扔骰子(六面)游戏,谁投出的点数最大算谁胜利,现在已知小Y和小W的得分,请你帮小D求出她获胜的概率
注意:
1.以"分子/分母"输出,特别的,若不可能获胜输出"0/1",100%获胜输出"1/1"
2.小Y和小W非常绅士,如果小D的得分和他们一样,他们也会算作小D获胜 Translated by @稀神探女
输入输出样例
输入 #1复制
4 2
输出 #1复制
1/2
非常水的一题,算出赢最大点数的概率即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[3];
scanf("%d%d",a+0,a+1);
int maxi=max(a[0],a[1]);
if(maxi==1)
printf("1/1");
if(maxi==2)
printf("5/6");
if(maxi==3)
printf("2/3");
if(maxi==5)
printf("1/3");
if(maxi==4)
printf("1/2");
if(maxi==6)
printf("1/6");
}
第三题:
CF30B
关于 Codeforces 的网站 king Copa 经常被报道,使得它在要使用网站进行训练和比赛的人之间迅速流行开来。最近, Copa 明白,要征服世界,他需要组织世界 Codeforces 锦标赛。他希望在这次比赛之后之后,最聪明的人将成为被挑选出来成为他的下属,然后征服世界最艰难的部分将会完成。
Codeforces 世界总决赛的最后一轮定于 YYYY 年 MMMM 月 DDDD 日举行,其中 DDDD 是当天的日期, MMMM 是当月的月份, YYYY 是当年的年份的最后两位。Bob 很幸运地能成为来自 Berland 的一名决赛选手。但有一个问题:根据比赛规则,所有参赛者在决赛时必须年满 1818 岁。 Bob 出生于 BYBY 年, BMBM 月,BDBD 日。这个日期记录在他的护照上,他的护照复印件已经寄给了组织者。但是 Bob 了解到,在不同的国家,日期的书写方式是不同的。例如,在美国,先写月份,然后写日期,最后写年份。
鲍勃想知道是否有可能重新排列他出生日期的数字,以便他在 YYYY 年, MMMM 月, DDDD 日那天至少 1818 岁。他看出,在他的祖国,日期写的顺序不一样。请帮帮他。 根据另一个奇怪的规则,合格的参赛者必须与决赛日期出生在同一个世纪。如果决赛当天刚好是参赛者的 1818 岁生日,则他可以参加。
因为我们只考虑从 20012001 年到 20992099 年的决赛年份,所以使用以下规则:如果年份的数字可以被 44 整除,那么年份就是闰年。
输入格式:
第一行包括三个数字 DD,MM,YYDD,MM,YY ,第二行包括三个数字 BD,BM,BYBD,BM,BY ,数据保证两个日期的正确性,并且 BYBY 和 YYYY 保证在 [ 01 ,99 ][01,99] 中。
输出格式:
如果可能通过重新排列出生日期的顺序,让 Bob 在比赛当天至少 1818 岁,则输出 YES 。如果不能,则输出 NO。
输入输出样例
输入 #1复制
01.01.98 01.01.80
输出 #1复制
YES
输入 #2复制
20.10.20 10.02.30
输出 #2复制
NO
输入 #3复制
28.02.74 28.02.64
输出 #3复制
NO
解题思路:只需要将BD,BM,BY全排列进行判断能否满足参赛要求在输出即可。
AD代码:
#include<bits/stdc++.h>
int dd,mm,yy,b,c,d;
int a[20]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int f(int d,int m,int y)
{
if(y%4==0) a[2]=29;
if(m>12) return 0;
if(d>a[m]) return 0;
if(y+18<yy) return 1;
if(y+18>yy) return 0;
if(y+18==yy) if(m>mm) return 0;
if(y+18==yy) if(m<mm) return 1;
if(y+18==yy) if(m==mm) if(d<=dd) return 1;
return 0;
}
int main()
{
scanf("%d.%d.%d",&dd,&mm,&yy);
scanf("%d.%d.%d",&b,&c,&d);
if(f(b,c,d)||f(b,d,c)||f(c,b,d)||f(c,d,b)||f(d,c,b)||f(d,b,c) )
printf("YES");
else printf("NO");
return 0;
}
21.02.31
10.1.21
第四题:
CF12B
给定一个数NN,要求把NN的各个数位打乱,要求组成一个可能的,最小的数(最小数有可能含有前导00)。现在已经有一个“最小数”,请你判断这个“最小数”是不是最小数。
第一行输入n不含前导0。
第二行输入的假定的最小数可能含有前导0。 题目要求排序后的最小数不含前导0。
输入格式
两行。 第一行是给定的数NN。 第二行是假定的NN重组的“最小数”。
输出格式
一行。 如果输入的最小数就是NN重组的最小数,输出“OK”。 否则输出“WRONG_ANSWER”。
Translated by LiM_817
输入输出样例
输入 #1复制
3310 1033
输出 #1复制
OK
输入 #2复制
4 5
输出 #2复制
WRONG_ANSWER
解题思路:一开始被那个前导0搞的人有点晕,后来理解了一下发现意思就是N这个数字前面可能会有0但是最小数前面没有0,那就要用到字符串,再看后需要注意的就是如果N里面有0就把第一个放非0的最小值,后面的按升序排列,没有0就需要特判直接升序就是最小数。
AD代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char n[100],m[100];
scanf("%s%s",&n,&m);
int i;
sort(n,n+strlen(n));
for(i=0;i<strlen(n);i++)
if(n[i]!='0')break;
if(i<strlen(n))
swap(n[0],n[i]);
int flag=0;
if(strcmp(n,m)==0)flag=1;
if(flag)printf("OK");
else printf("WRONG_ANSWER");
}
17:00~18:30
写题解,温习之前的题解。