AtCoder Beginner Contest 217 A B C D E G 题解
Posted yueshehanjiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest 217 A B C D E G 题解相关的知识,希望对你有一定的参考价值。
纪
念
我
第
一
次
非
严
格
意
义
上
的
A
K
纪念我第一次非严格意义上的AK
纪念我第一次非严格意义上的AK
A - Lexicographic Order
题意:
s
字
符
串
的
字
典
序
是
否
小
于
t
s字符串的字典序是否小于t
s字符串的字典序是否小于t
思路:
模
拟
模拟
模拟
时间复杂度:
O
1
O1
O1
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define de(x) cout << x << "\\n"
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int N = 1e6 + 10 , M = 2010 , inf = 0x3f3f3f3f , mod = 1e9 + 7 ;
signed main()
{
string s , t ;
cin >> s >> t ;
if(s < t) puts("Yes") ;
else puts("No") ;
return 0;
}
B - AtCoder Quiz
题意:
给
定
4
个
不
同
的
字
符
串
给定4个不同的字符串
给定4个不同的字符串
输
入
三
个
不
同
字
符
串
,
求
没
有
出
现
过
的
那
个
输入三个不同字符串,求没有出现过的那个
输入三个不同字符串,求没有出现过的那个
思路:
模
拟
模拟
模拟
时间复杂度:
O
1
O1
O1
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define de(x) cout << x << "\\n"
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int N = 1e6 + 10 , M = 2010 , inf = 0x3f3f3f3f , mod = 1e9 + 7 ;
map<string,int> q ;
signed main()
{
string x ;
q["ABC"] ++ ;
q["ARC"] ++ ;
q["AGC"] ++ ;
q["AHC"] ++ ;
for(int i = 1 ; i <= 3 ; i ++)
{
cin >> x ;
q[x] ++ ;
}
for(auto i : q)
{
if(i.y == 1)
{
cout << i.x << "\\n" ;
break ;
}
}
return 0;
}
C - Inverse of Permutation
题意:
给
定
一
个
n
的
排
列
给定一个n的排列
给定一个n的排列
求
对
所
有
的
[
1
<
=
i
<
=
n
]
等
于
i
的
下
标
求对所有的[1 <= i <= n ] 等于i的下标
求对所有的[1<=i<=n]等于i的下标
思路:
模
拟
模拟
模拟
时间复杂度:
O
n
On
On
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define de(x) cout << x << "\\n"
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int N = 1e6 + 10 , M = 2010 , inf = 0x3f3f3f3f , mod = 1e9 + 7 ;
int n ;
int a[N] ;
int q[N] ;
signed main()
{
cin >> n ;
fer(i,1,n) sf(a[i]) ;
fer(i,1,n)
{
q[a[i]] = i ;
}
fer(i,1,n)
{
cout << q[i] << " " ;
}
return 0;
}
D - Cutting Woods
题意:
一
开
始
有
一
根
木
棒
一开始有一根木棒
一开始有一根木棒
长
度
为
n
长度为n
长度为n
从
1
到
n
编
号
从1到n编号
从1到n编号
输
入
q
个
操
作
输入q个操作
输入q个操作
操
作
1
操作1
操作1
断
开
x
所
在
的
木
棒
断开x所在的木棒
断开x所在的木棒
[
1
,
n
]
断
开
x
变
成
了
[
1
,
x
]
[
x
+
1
,
n
]
[1,n] 断开x变成了 [1,x] [x+1,n]
[1,n]断开x变成了[1,x][x+1,n]
操
作
2
操作2
操作2
询
问
x
所
在
的
区
间
长
度
询问x所在的区间长度
询问x所在的区间长度
q
<
=
1
e
5
q <= 1e5
q<=1e5
n
<
=
1
e
9
n <= 1e9
n<=1e9
1
<
=
x
<
=
1
e
9
1 <= x <= 1e9
1<=x<=1e9
思路:
有
个
很
重
要
的
性
质
有个很重要的性质
有个很重要的性质
分
割
之
后
左
边
以
及
右
边
这
个
区
间
的
答
案
是
固
定
的
分割之后左边以及右边这个区间的答案是固定的
分割之后左边以及右边这个区间的答案是固定的
也
就
是
说
答
案
只
跟
分
割
点
有
关
也就是说答案只跟分割点有关
也就是说答案只跟分割点有关
比
如
区
间
[
l
,
r
]
分
割
x
变
成
了
[
l
,
x
]
,
[
x
+
1
,
r
]
比如区间[l,r] 分割x变成了[l,x] , [x+1,r]
比如区间[l,r]分割x变成了[l,x],[x+1,r]
可
以
发
现
可以发现
可以发现
l
到
x
这
个
区
间
的
询
问
答
案
都
是
x
−
l
+
1
l到x这个区间的询问答案都是x-l+1
l到x这个区间的询问答案都是x−l+1
x
+
1
到
r
这
个
区
间
的
询
问
答
案
都
是
r
−
(
x
+
1
)
−
1
x+1到r这个区间的询问答案都是r-(x + 1) - 1
x+1到r这个区间的询问答案都是r−(x+1)−1
所
以
可
以
考
虑
二
分
找
到
所
在
区
间
相
邻
2
个
的
分
割
点
下
标
所以可以考虑二分找到所在区间相邻2个的分割点下标
所以可以考虑二分找到所在区间相邻2个的分割点下标
先
考
虑
边
界
问
题
先考虑边界问题
先考虑边界问题
边
界
无
非
是
0
−
n
+
1
/
0
−
n
/
1
−
n
/
1
−
n
+
1
边界无非是0 - n + 1 / 0 - n / 1 - n / 1 - n + 1
边界无非是0−n+1/0−n/1−n/1−n+1
以上是关于AtCoder Beginner Contest 217 A B C D E G 题解的主要内容,如果未能解决你的问题,请参考以下文章
AtCoder Beginner Contest 115 题解