Codeforces Round #741 div.2 A-F题解
Posted 欣君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #741 div.2 A-F题解相关的知识,希望对你有一定的参考价值。
视频讲解:TBD
A. The Miracle and the Sleeper
题目大意
给定两个正整数 l , r ( 1 ≤ l ≤ r ≤ 1 0 9 ) l,r~(1 \\leq l \\leq r \\leq 10^9) l,r (1≤l≤r≤109) ,求满足 r ≥ a ≥ b ≥ l r \\ge a \\ge b \\ge l r≥a≥b≥l 的最大的 $a \\mod{b} $ 。
题解
若
l
l
l 足够小,那么
a
a
a 应该取
r
r
r ,
b
b
b 应该取
⌊
r
+
1
2
⌋
\\lfloor \\frac{r+1}{2} \\rfloor
⌊2r+1⌋ ,答案为
⌊
r
−
1
2
⌋
\\lfloor \\frac{r-1}{2} \\rfloor
⌊2r−1⌋ 。
若
l
l
l 较大,那么
a
=
r
,
b
=
l
a=r,b=l
a=r,b=l ,答案为
r
m
o
d
l
r\\mod{l}
rmodl 。
分界点为
⌊
r
+
1
2
⌋
\\lfloor \\frac{r+1}{2} \\rfloor
⌊2r+1⌋ 。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T,l,r;
cin>>T;
while(T--)
{
cin>>l>>r;
if(l<=(r+1)/2)
cout<<(r-1)/2<<endl;
else
cout<<r-l<<endl;
}
}
B. Scenes From a Memory
题目大意
给定一个十进制下不包含 0 0 0 的整数 n ( 1 ≤ n < 1 0 50 ) n(1 \\le n < 10^{50}) n(1≤n<1050) ,删除最多的数字,使其变为非素数。
给定数据保证有解,若有多组解则输出任意一种即可。
题解
若包含
1
,
4
,
6
,
8
,
9
1,4,6,8,9
1,4,6,8,9 之一,则直接输出一位数即可。
若包含
2
,
5
2,5
2,5 之一且不为首位,则直接输出首位与
2
2
2 或
5
5
5 即可。
若包含两个
3
,
7
3,7
3,7 ,则直接输出
33
33
33 或
77
77
77 即可。
剩余只有
37
,
73
,
237
,
273
,
537
,
573
37,73,237,273,537,573
37,73,237,273,537,573 这几种情况。由于保证必定有解,因此不存在
37
,
73
37,73
37,73 这两种无解情况。对于剩余四种情况,显然
27
27
27 或
57
57
57 合法。
因此,答案必定为二位数,可以通过上述方式分类讨论,也可以直接枚举得到。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T,sum[15],pos[15],i,j,k,flag;
char s[55];
scanf("%d",&T);
while(T--)
{
scanf("%d",&k);
scanf("%s",&s);
memset(sum,0,sizeof(sum));
for(i=0;i<k;i++)
{
sum[s[i]-'0']++;
pos[s[i]-'0']=i;
}
if(sum[1])
printf("1\\n1\\n");
else if(sum[4])
printf("1\\n4\\n");
else if(sum[6])
printf("1\\n6\\n");
else if(sum[8])
printf("1\\n8\\n");
else if(sum[9])
printf("1\\n9\\n");
else if(sum[2]&&pos[2]!=0)
printf("2\\n%c2\\n",s[0]);
else if(sum[5]&&pos[5]!=0)
printf("2\\n%c5\\n",s[0]);
else if(sum[3]>1)
printf("2\\n33\\n");
else if(sum[7]>1)
printf("2\\n77\\n");
else
{
flag=1;
for(i=0;i<k&&flag;i++)
{
for(j=i+1;j<k;j++)
{
if((s[i]-'0'+s[j]-'0')%3==0)
{
printf("2\\n%c%c\\n",s[i],s[j]);
flag=0;
break;
}
}
}
}
}
}
C. Rings
题目大意
有一个长度为 n ( 2 ≤ n ≤ 2 ⋅ 1 0 4 ) n~(2 \\leq n \\leq 2\\cdot 10^4) n (2≤n≤2⋅104) 仅由01构成的字符串 s s s 。
定义函数 f f f 表示将字符串视为二进制数后再转为十进制数的结果,例如 f ( 001010 ) = 10 f(001010)=10 f(001010)=10 。
你需要找到满足以下条件的两对整数 ( l 1 , r 1 ) , ( l 2 , r 2 ) (l_1,r_1),(l_2,r_2) (l1,r1),(l2,r2) :
- 1 ≤ l 1 ≤ n , 1 ≤ r 1 ≤ n , r 1 − l 1 + 1 ≥ ⌊ n 2 ⌋ 1 \\leq l_1 \\leq n,1 \\leq r_1 \\leq n,r_1-l_1+1\\geq \\lfloor \\frac{n}{2} \\rfloor 1≤l1≤n,1≤r1≤n,r1−l1+1≥⌊2n⌋
- 1 ≤ l 2 ≤ n , 1 ≤ r 2 ≤ n , r 2 − l 2 + 1 ≥ ⌊ n 2 ⌋ 1 \\leq l_2 \\leq n,1 \\leq r_2 \\leq n,r_2-l_2+1\\geq \\lfloor \\frac{n}{2} \\rfloor 1≤l2≤n,1≤r2≤n,r2−l2+1≥⌊2n⌋
- 存在非负整数 k k k ,满足 f ( s [ l 1 : r 1 ] ) = f ( s [ l 2 : r 2 ] ) ⋅ k f(s[l_1:r_1])=f(s[l_2:r_2])\\cdot k f(s[l1:r1])=f(s[l2:r2])⋅k
题解
由于是二进制下截取子串,因此考虑
k
=
2
k=2
< 以上是关于Codeforces Round #741 div.2 A-F题解的主要内容,如果未能解决你的问题,请参考以下文章 Codeforces Round #741 Div. 2 A B C D1 D2 Codeforces Round #741 Div. 2 A B C D1 D2 Codeforces Round #741 div.2 A-F题解 Codeforces Round #741 Div. 2 A B C D1 D2