EasyRound1题解

尽管参加比赛的才三个人,而且T3数据还出了锅,但为了纪念Herself32的第一次个人邀请赛,他还是决定写题解。

恭喜MoveToEx大佬$rk1\;184pts$,恭喜extmool大佬$rk2\;100pts$。

总体平均难度:50602l.png

T1 U55311标题统计升级版I

题面描述

凯凯刚写了一篇美妙的作文,请问这篇作文的标题和题记中有多少个字符? 注意:标题和题记中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时,空格和换行符不计算在内。

输入输出格式

输入格式

一个字符串$s$。

输出格式

一个正整数,即这篇作文的标题和题记中的字符个数。

INPUT & OUTPUT‘s example

Input’s example #1

1
2
12A
12

Output’s example #1

1
5

Input’s example #2

1
2
Ca 45
QAQ

Output’s example #2

1
7

Input’s example #3

1
prove 12

Output’s example #3

1
7

说明

$$1 \leq |s| \leq 1000$$

分析

本题其实升级并不明显,只是对于输入数据多加了一些换行符,但这样也限制了我们必须要使用while(cin>>s)

本来,Herself32想把数据范围改成$1 \leq |s| \leq 10^9$,但是她太弱了,造不出来数据,于是升级版就咕了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// luogu-judger-enable-o2
/* Headers */
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
namespace FastIO{
const int BUFSIZE=(1<<20);
char ibuf[BUFSIZE],*is=ibuf,*it=ibuf;
char obuf[BUFSIZE],*os=obuf,*ot=obuf+BUFSIZE;
inline char getch(){
if(is==it)
it=(is=ibuf)+fread(ibuf,1,BUFSIZE,stdin);
return (is==it)?EOF:*is++;
}
inline int getint(){
int neg=0,res=0,ch=getch();
while(!(isdigit(ch)||ch=='-')&&ch!=EOF){
ch=getch();
}
if(ch=='-'){
neg=1;ch=getch();
}
while(isdigit(ch)){
res=(res<<3)+(res<<1)+(ch-'0');
}
return neg?-res:res;
}
inline void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
inline void space(int x){
if(x==0)putchar(' ');
else putchar('\n');
}
}
using namespace FastIO;
/* definitions */
char s;
int cnt;
/* functions */
int main(){
while(cin>>s){
if(s==' '||s=='\n'||s=='\r')continue;
else cnt++;
}
printf("%d",cnt);
return 0;
}

T2 U54965猜数字

题面描述

蒟蒻Herself37在考试中遇到了一道难题:

若$a,\;b$均为正数,且$a+b=1$,求$\frac 1a+\frac 1b$的取值范围。

Herself37这么蒻,她果然直接懵逼了。于是她决定用猜数字的方式来试一下。
现在她会给神犇你一个数字$k$,你需要帮她算一下这个数字是否在答案范围内。
如果这个数字在答案范围内,那么输出“Yes”。
如果不在,输出“No”。

输入输出格式

输入格式

一个正整数,表示Herself37让你判断的数$k$。

输出格式

这个数字是否在答案范围内。
如果这个数字在答案范围内,那么输出“Yes”。
如果不在,输出“No”。

INPUT & OUTPUT’s example

Input’s example #1

1
12

Output’s example #1

1
Yes

Input’s example #2

1
1

Output’s example #2

1
No

说明

$$1 \leq k \leq 10^{200}$$

分析

因为本题的核心在于那一道数学题,那我就把它解出来。

$$\because a+b=1 \;\;\; a,b \in \bf N$$

$$\therefore a+b \geq 2\sqrt{ab} $$

且仅当$a=b$时 $a+b=2\sqrt{ab}$

$$\therefore \sqrt{ab} \leq \frac 12$$

$$\therefore ab \leq 4$$

$\therefore \frac 1a+\frac 1b=$ $\frac {a+b}{ab}$

$\therefore \frac 1a+\frac 1b= $ $\frac{1}{ab}$

$$\therefore \frac 1a+\frac 1b\geq 4$$

所以,我们对于输入数据只需要判断是否大于$4$即可。

因为数据范围很大:
$$1 \leq k \leq 10^{200}$$

所以我们使用字符串解决。

对于读入的数据,如果它的位数$\geq 2$那么直接输出“No”,如果是$1$位,那么判断:

1
if(s[0]-'0'>=4)printf("Yes\n");

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* Headers */
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
namespace FastIO{
const int BUFSIZE=(1<<20);
char ibuf[BUFSIZE],*is=ibuf,*it=ibuf;
char obuf[BUFSIZE],*os=obuf,*ot=obuf+BUFSIZE;
inline char getch(){
if(is==it)
it=(is=ibuf)+fread(ibuf,1,BUFSIZE,stdin);
return (is==it)?EOF:*is++;
}
inline int getint(){
int res=0,neg=0,ch=getch();
while(!(isdigit(ch)||ch=='-')&&ch!=EOF)
ch=getch();
if(ch=='-'){
neg=1;ch=getch();
}
while(isdigit(ch)){
res=(res<<3)+(res<<1)+(ch-'0');
ch=getch();
}
return neg?-res:res;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline void space(int x){
if(x!=0) putchar(' ');
else putchar('\n');
}
}
using namespace FastIO;
/* definitions */
string s;
int len;
/* functions */
int main(int argc,char *argv[]){
cin>>s;
len=s.length();
if(len==1){
if(s[0]=='0'||s[0]=='1'||s[0]=='2'||s[0]=='3')
printf("No\n");
else printf("Yes\n");
}
else printf("Yes\n");
return 0;
}

T3 U55343巫神供奉庙

题目描述

传说中,这7位巫神身后各有7个化身,这7个化身身后又各有7个化身,如此无尽的循环下去。

这让雕刻神像的雕像师很蒙蔽,于是大祭司说,今年是太阳历k年,那就雕刻七位巫神第k次化身时的化身吧。

大祭司又补充说,太阳也是我们的信仰,所以还要加一座太阳的雕像。

当地人们认为8是一个好数字,所以每座寺庙只能供奉8尊雕像。

雕像师想知道能不能把每一座寺庙都供奉8尊雕像。

输入输出格式

输入格式

一个正整数$k$。

输出格式

如果每一座寺庙都能供奉8尊雕像,输出GREAT 反之,输出IMPOSOBLE

INPUT & OUTPUT‘s example

Input’s example #1

1
12

Output’s example #1

1
IMPOSOPLE

Input’s example #2

1
39

Output’s example #2

1
GREAT

说明

$$1 \leq k \leq 10^{200}$$

分析

通过对于题目的分析,我们知道,题目大意是:

求$7^k+1$是否能被$8$整除

我们先来看几组例子吧。
当$k=1$时,$7^k+1=7^1+1=8$,能被$8$整除。
当$k=2$时,$7^k+1=7^2+1=50$,不能被$8$整除。
当$k=3$时,$7^k+1=7^3+1=344$,能被$8$整除。
当$k=4$时,$7^k+1=7^4+1=2402$,不能被$8$整除。

所以,我们猜想当$k$为奇数时,$7^k+1$能被$8$整除。
证明:
当$k=1$时,$7^k+1=7^1+1=8$,能被$8$整除。

假设当$k=x$时,$7^x+1$能被$8$整除。

那么当$k=x+2$时,$7^k+1=7^{x+2}+1=7^2(7^x+1)+1-7^2$

即$7^k+1=49(7^x+1)-48$。

$\because 7^x+1$能被$8$整除,且$48$能被$8$整除。

$\therefore 7^k+1$当$k$为奇数时,能被$8$整除。

所以本题只需要判断输入数据的奇偶性即可。

因为数据范围依旧很大:
$$1 \leq k \leq 10^{200}$$

所以我们不能直接将输入数据%2

根据小学一年级知识得,一个数如果是偶数,那么它的最后一位数能够被$2$整除。

显然,字符串$length$操作!

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// luogu-judger-enable-o2
/* Headers */
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
namespace FastIO{
const int BUFSIZE=(1<<20);
char ibuf[BUFSIZE],*is=ibuf,*it=ibuf;
char obuf[BUFSIZE],*os=obuf,*ot=obuf+BUFSIZE;
inline char getch(){
if(is==it)
it=(is=ibuf)+fread(ibuf,1,BUFSIZE,stdin);
return (is==it)?EOF:*is++;
}
inline int getint(){
int res=0,neg=0,ch=getch();
while(!(isdigit(ch)||ch=='-')&&ch!=EOF)
ch=getch();
if(ch=='-'){
neg=1;ch=getch();
}
while(isdigit(ch)){
res=(res<<3)+(res<<1)+(ch-'0');
ch=getch();
}
return neg?-res:res;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline void space(int x){
if(x!=0) putchar(' ');
else putchar('\n');
}
}
using namespace FastIO;
/* define */
#define MAXN 10019
/* definitions */
string s;
int tmp;
int main(int argc,char *argv[]){
cin>>s;
int len=s.length();
tmp=s[len-1]-'0';
if(tmp%2==0)printf("IMPOSOBLE");
else printf("GREAT");
return 0;
}

tips:题解发布后依旧允许做题。

THE END