Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))ABCD1D2E题解
Posted quinn18
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))ABCD1D2E题解相关的知识,希望对你有一定的参考价值。
文章目录
A - Simply Strange Sort
题目链接
题意:
a
[
i
]
>
a
[
i
+
1
]
a[i]>a[i+1]
a[i]>a[i+1]就可以交换直到序列升序,第奇数次迭代
i
i
i 只能是奇数,偶数同理
暴力摸你
一开始没看题直接乱摸T^T
然后就是要注意check整个序列 奇数没有能交换的不一定代表序列有序可能在偶数
int main(){
int t;cin>>t;
while(t--){
int n;cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
int cnt=0;
while(1) {
int q=0;
for(int i=1; i<n; i++) {
if(cnt%2==0&&i%2==1&&a[i]>a[i+1]) {
swap(a[i], a[i+1]);
i++;
q++;
}
if(cnt%2==1&&i%2==0&&a[i]>a[i+1]) {
swap(a[i], a[i+1]);
i++;
q++;
}
}
for(int i=1; i<=n; i++) {
if(a[i]!=i) q++;
}
if(q) cnt++;
else break;
}
cout<<cnt<<endl;
}
return 0;
}
B - Charmed by the Game
题目链接
题意
A
l
i
c
e
Alice
Alice 和
B
o
b
Bob
Bob轮流发球 问会有几次我发球但是我输满足
A
l
i
c
e
Alice
Alice赢了
a
a
a 次
B
o
b
Bob
Bob 赢了
b
b
b 次
就摸你几组样例
a
=
=
0
∣
∣
b
=
=
0
a==0||b==0
a==0∣∣b==0
a
=
=
b
a==b
a==b
a
+
b
a+b
a+b 是奇数和偶数的情况
int main(){
int t;cin>>t;
while(t--){
int a, b;cin>>a>>b;
if(a==0||b==0) {
if((a+b)%2==0) cout<<1<<endl<<(a+b)/2<<endl;//偶数
else cout<<2<<endl<<(a+b)/2<<" "<<(a+b)/2+1<<endl;//奇数
}else {
if(a==b) {
cout<<a+1<<endl;
for(int i=0; i<=a+b; i+=2) {
cout<<i<<" ";
}
cout<<endl;
}else {
if(a>b) swap(a, b);
if((a+b)%2==1) {
int cnt=0;//最小是(b-a)/2
for(int i=(b-a)/2; i<=a+b-(b-a)/2; i++) cnt++;
cout<<cnt<<endl;
for(int i=(b-a)/2; i<=a+b-(b-a)/2; i++) cout<<i<<" ";
cout<<endl;
}else {
cout<<a+1<<endl;//个数是最小的+1 因为最多能改这么多下次
for(int i=(b-a)/2; i<=a+b-(b-a)/2; i+=2) {
cout<<i<<" ";
}
}
}
}
}
return 0;
}
C - Deep Down Below
题目链接
题意:有
n
n
n 个洞穴,洞穴里有
x
x
x 个怪物,选择洞穴的顺序可以变,进入该洞穴的顺序不能变就是只能按顺序打怪兽,只有当前武力值大于怪物的值才能打败他,打败之后武力值
+
1
+1
+1 ,问最小武力值使进入所有洞穴打败所有怪兽
直接贪心摸你
struct node {
int maxx;
vector<int> g;
}a[maxn];
bool cmp(node a, node b) {
return a.maxx<b.maxx;
}
signed main(){
int t;cin>>t;
while(t--) {
int n;cin>>n;
for(int i=1; i<=n; i++) {
a[i].maxx=0;
a[i].g.clear();
int x; cin>>x;
for(int j=1; j<=x; j++) {
int w; cin>>w;
a[i].g.push_back(w);
if(a[i].maxx<w-j+1) {
a[i].maxx=w-j+1;//要的是相对的位置 因为之前打败的可以+1
}
}
}
sort(a+1, a+1+n, cmp);//按照maxx排序
int cnt=0;
int lil=a[1].maxx;
for(int i=1; i<=n; i++) {
for(int j=0; j<a[i].g.size(); j++) {
if(lil+cnt<=a[i].g[j]) {//不够就把力量变大
lil=a[i].g[j]-cnt+1;
}
cnt++;//记录之前打败的+1的次数
}
}
cout<<lil<<endl;
}
return 0;
}
D1 - Up the Strip (simplified version)
题目链接
题意:你有一条垂直带有
n
n
n 个单元格你把一块令牌从
n
n
n 移到
1
1
1 ,当令牌在单元格
x
>
1
x>1
x>1 可以有下面两种类型移动
1
1
1减法:选择在
1
x
−
1
1~x-1
1 x−1 移动令牌从
x
x
x 到
x
−
y
x-y
x−y
2
2
2基数除法:选择在
z
z
z 在
2
x
2~x
2 x 移动令牌从
x
x
x 到
x
/
z
x/z
x/z(向下取整
问有几种方案数量
给你
n
和
m
o
d
n和mod
n和mod
(减法)
d
p
1
[
i
]
=
s
u
m
[
i
−
1
]
,
其
中
s
u
m
[
i
]
=
d
p
1
[
1
]
+
.
.
.
.
.
.
+
d
p
1
[
i
]
dp1[i]=sum[i-1],其中sum[i]=dp1[1]+......+dp1[i]
dp1[i]=sum[i−1],其中sum[i]=dp1[1]+......+dp1[i]但是可以直接树状数组求出
(整除) dp2[i]=dp2[i/2]+…+dp2[i/i]
我们发现对于一个固定的
j
j
j,
i
/
j
i/j
i/j 具有周期性,并在
(
i
/
j
)
(i/j)
(i/j) 时
+
1
+1
+1,则转移方程可写为:
d
p
[
i
]
=
s
u
m
[
i
]
+
(
.
.
.
.
d
p
[
i
/
j
]
−
d
p
[
(
i
/
j
)
−
1
]
)
dp[i]=sum[i]+(....dp[i/j]-dp[(i/j)-1])
dp[i]=sum[i]+(....dp[i/j]−dp[(i/j)−1])(其中i%j==0且j>=2)
时间复杂度O(Nsqrt(N))
int dp[N];//#define int long long
int n, m;
int c[N];
int lowbit(int x) {
return x&(-x);
}
void updata(int i,int k) {
while(i <= n) {
c[i] += k;
i += lowbit(i);
}
}
int getsum(int i) {
int res = 0;
while(i > 0) {
res += c[i];
i -= lowbit(i);
}
return res;
}
signed main() {
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>M;
dp[1]=1;
int sum=1;
add(1, 1);
for(int i=2; i<=n; i++){
int a=0, k=1, b=0;
for(j=1;j*j<=i;j++){
a=(a+dp[j]*(i-i/(j+1)-b)%M)%M;
b=((i-i/(j+1)+M)%M)%M;
if(j!=i/j){
if(i==1) continue;
a=(a+dp[i/j])%M;
}
}
sum+=a+getsum(i-1))%M;
sum%=M;
updata(i, sum);
dp[i]=sum;
}
cout<<dp[n]<<'\\n';
return 0;
}
总结
以上是关于Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))ABCD1D2E题解的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #740 Div. 2 A B C D1 D2
Codeforces Round #740 Div. 2 A B C D1 D2
Codeforces Round #740 (Div. 2) D1. Up the Strip (simplified version)
Codeforces Round #740 (Div. 2) D1. Up the Strip (simplified version)
Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))
Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))ABCD1D2E题解