Educational Codeforces Round 123 (Rated for Div. 2) A-E题解
Posted ZZXzzx0_0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 123 (Rated for Div. 2) A-E题解相关的知识,希望对你有一定的参考价值。
A. Doors and Keys
思路:
模
拟
即
可
模拟即可
模拟即可
时间复杂度:
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 cf int _; cin>> _; while(_--)
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define y second
#define x first
using namespace std;
inline void de(auto x) cout << x << "\\n" ;
const int N = 1e6 + 10 , M = 3010 , mod = 998244353 ;
signed main()
cf
string s ;
cin >> s ;
int a = 0 , b = 0 , c = 0 ;
int f1 = 0 ;
for(auto i : s)
if(i == 'r') a ++ ;
else if(i == 'g') b ++ ;
else if(i == 'b') c ++ ;
else if(i == 'R')
if(a >= 1) a -- ;
else f1 = 1 ;
else if(i == 'G')
if(b >= 1) b -- ;
else f1 = 1 ;
else
if(c >= 1) c -- ;
else f1 = 1 ;
if(f1) puts("NO") ;
else puts("YES") ;
return 0;
B. Anti-Fibonacci Permutation
思路:
构
造
a
数
组
为
1
,
3
,
2
,
4
,
5.....
n
构造a数组为1,3,2,4,5.....n
构造a数组为1,3,2,4,5.....n
n
e
x
t
−
p
e
r
m
u
t
a
t
i
o
n
暴
力
判
断
输
出
即
可
next-permutation暴力判断输出即可
next−permutation暴力判断输出即可
时间复杂度:
O
n
2
On^2
On2
#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 cf int _; cin>> _; while(_--)
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define y second
#define x first
using namespace std;
inline void de(auto x) cout << x << "\\n" ;
const int N = 1e6 + 10 , M = 3010 , mod = 998244353 ;
int a[N] ;
signed main()
cf
int n ;
cin >> n ;
fer(i,1,n) a[i] = i ;
swap(a[2],a[3]) ;
int k = n ;
while(next_permutation(a + 1 , a + 1 + n))
int f1 = 0 ;
fer(i,3,n)
if(a[i] == a[i - 1] + a[i - 2])
f1 = 1 ;
if(!f1)
k -- ;
for(int i = 1 ; i <= n ; i ++) cout << a[i] << " " ;
puts("") ;
if(!k) break ;
return 0;
C. Increase Subarray Sums
思路:
首
先
f
(
i
)
=
m
a
x
(
f
(
i
)
,
f
(
i
−
1
)
)
首先f(i) = max(f(i),f(i-1))
首先f(i)=max(f(i),f(i−1))
注
意
到
n
最
大
只
有
5000
注意到n最大只有5000
注意到n最大只有5000
长
度
为
1
的
子
数
组
有
n
个
长度为1的子数组有n个
长度为1的子数组有n个
长
度
为
2
的
子
数
组
有
n
−
1
个
长度为2的子数组有n-1个
长度为2的子数组有n−1个
.
.
.
.
.
.
.
.......
.......
长
度
为
n
的
子
数
组
有
1
个
长度为n的子数组有1个
长度为n的子数组有1个
所
以
一
共
有
n
∗
(
n
+
1
)
/
2
个
子
数
组
所以一共有n*(n+1)/2个子数组
所以一共有n∗(n+1)/2个子数组
对
于
f
(
i
)
来
说
,
选
i
个
数
+
=
x
对于f(i)来说,选i个数+=x
对于f(i)来说,选i个数+=x
我
们
可
以
选
择
所
有
长
度
>
=
i
的
子
数
组
的
和
+
=
i
∗
x
我们可以选择所有长度>=i的子数组的和+=i*x
我们可以选择所有长度>=i的子数组的和+=i∗x
设
v
[
i
]
数
组
为
所
有
长
度
>
=
i
的
子
数
组
的
和
的
最
大
值
设v[i]数组为所有长度>=i的子数组的和的最大值
设v[i]数组为所有长度>=i的子数组的和的最大值
求
所
有
子
数
组
的
和
可
以
用
前
缀
和
优
化
求所有子数组的和可以用前缀和优化
求所有子数组的和可以用前缀和优化
那 么 答 案 即 为 f ( i ) = m a x ( v [ i ] + i ∗ x , f ( i − 1 ) ) 那么答案即为f(i)=max(v[i]+i*x,f(i-1)) 那么答案即为f(i)=max(v[i]+i∗x,f(i−1))
时间复杂度: O n 2 On^2 On2
#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 cf int _; cin>> _; while(_--)
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define y second
#define x first
using namespace std;
inline void de(auto x) cout << x << "\\n" ;
const int N = 1e6 + 10 , M = 3010 , mod = 998244353 ;
int n ;
int a[N] , s[N] , v[N] , x ;
signed main()
cf
cin >> n >> x ;
fer(i,1,n) sf(a[i]) , s[i] = s[i - 1] + a[i] , v[i] = -1e9 ;
v[0] = 0 ;
fer(len,1,n)
for(int i = 1 ; i + len - 1 <= n ; i ++)
int j = i + len - 1 ;
v[len] = max(v[len] , s[j] - s[i - 1]) ;
der(i,n-1,0) v[i] = max(v[i + 1] , v[i]) ;
int res = 0 ;
fer(i,0,n)
res = max(res , v[i] + i * x) ;
cout << res << ' ' ;
puts("") ;
return 0;
D. Cross Coloring
思路:
首
先
注
意
到
题
目
所
说
首先注意到题目所说
首先注意到题目所说
新
颜
色
将
应
用
于
每
个
单
元
格
,
无
论
该
单
元
格
在
操
作
之
前
是
否
着
色
新颜色将应用于每个单元格,无论该单元格在操作之前是否着色
新颜色将应用于每个单元格,无论以上是关于Educational Codeforces Round 123 (Rated for Div. 2) A-E题解的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 7 A
Educational Codeforces Round 7
Educational Codeforces Round 90
Educational Codeforces Round 33