0%

cf round1060 A、B题解

cf1060 div2的两道简单题
# A
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
#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
#define MOD 998244353
#define ll long long
#define endl '\n'

int main() {
int t;
cin>>t;
while(t--) {
int n,k;
cin>>n>>k;
string ss;
cin>>ss;
vector<int> s(n+10);
vector<bool> p(n+10);
for(int i=1;i<=n;i++){
if(ss[i-1]=='0') s[i]=0;
else s[i]=1;
}
int ans=0;
if(s[1]==1){
ans++;
}
for(int i=2;i<=n;i++){
if(s[i]==1){
bool flag=false;
for(int j=max(1,i-k+1);j<i;j++){
if(s[j]==1) flag=true;
}
if(flag==false){
ans++;
//cout<<i<<":";
p[i]=1;
}
}
}
cout<<ans<<endl;
}
return 0;
}

B

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
55
56
57
#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
#define MOD 998244353
#define ll long long
#define endl '\n'

int main() {
int t;
cin>>t;
while(t--) {
int n,k;
cin>>n;
vector<int> a(n+10);
int maxx=0;
for(int i=1;i<=n;i++){
cin>>a[i];
maxx=max(maxx,a[i]);
if(i%2==0) a[i]=maxx;
}
/*for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;*/
ll ans=0;
for(int i=1;i<=n;i++){
if(i%2==1){
if(i==1){
if(a[i]>=a[i+1]){
ans+=(a[i]-a[i+1])+1;
a[i]=a[i+1]-1;
}
}
else if(i==n){
if(a[i]>=a[i-1]){
ans+=(a[i]-a[i-1])+1;
a[i]=a[i-1]-1;
}
}else{
if(a[i]>=a[i-1]){
ans+=(a[i]-a[i-1])+1;
a[i]=a[i-1]-1;
}
if(a[i]>=a[i+1]){
ans+=(a[i]-a[i+1])+1;
a[i]=a[i+1]-1;
}
}
}
}
/*for(int i=1;i<=n;i++){
cout<<a[i]<<":";
} */
cout<<ans<<endl;
}
return 0;
}