img

AtCoder Beginner Contest 346

A - Adjacent Product

1
2
3
4
5
6
7
8
9
10
11
12
#include<bits/stdc++.h>
using namespace std;

int main(){
int n;cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
for(int i=1;i<n;i++) cout<<v[i]*v[i-1]<<' ';
cout<<'\n';
}

B - Piano

数据好小

暴力出奇迹

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
#include <bits/stdc++.h>
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
using ll = long long;
using namespace std;
const int N=1e6+100;
int sum1[N];
int sum2[N];
int main()
{
string s="wbwbwwbwbwbw";
string a=" ";
int x,y;
cin>>x>>y;
rep(i,1,100)
{
a+=s;
}
int t=s.length()-1;
rep(i,1,t*100)
{
if(a[i]=='w')
{
sum1[i]=sum1[i-1]+1;
sum2[i]=sum2[i-1];
}
else
{
sum1[i]=sum1[i-1];
sum2[i]=sum2[i-1]+1;
}
}
rep(i,x+y,t*100-1)
{
if(sum1[i]-sum1[i-x-y]==x&&sum2[i]-sum2[i-x-y]==y)
{cout<<"Yes";return 0;
}
}
cout<<"No";

}

C - Σ

留下那些小于的排序去重

减去即可,都是一眼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,k,a[N],R,ans;
signed main(){
cin>>n>>k;
for(int i=1,x;i<=n;i++){
cin>>x;
if(x>k) continue;
a[++R]=x;
}
sort(a+1,a+R+1);
R=unique(a+1,a+R+1)-a-1;
ans=k*(k+1)/2ll;
for(int i=1;i<=R;i++) ans-=a[i];
cout<<ans;
}
/*

*/

D - Gomamayo Sequence

定义一下状态

f[i] [j] [k]

k表示到第几位了

i如果是0表示前面没有两两相同的,反之是1就是有

j表示最后一位结尾是什么

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
int w[N];
ll f[2][2][N];
int n;
string a;
void solve()
{
cin>>n>>a;
a=" "+a;
rep(i,1,n)
{
cin>>w[i];
}
memset(f,0x3f3f3f,sizeof(f));
if(a[1]=='0')
{
f[0][1][1]=w[i];
f[0][0][1]=0;
}
else
{
f[0][0][1]=w[i];
f[0][1][1]=0;
}
rep(i,2,n)
{
if(a[i]=='0')
{
f[1][0][i]=min(f[1][1][i-1],f[0][0][i-1]);
f[0][0][i]=f[0][1][i-1];
f[0][1][i]=f[0][0][i-1]+w[i];
f[1][1][i]=w[i]+min(f[1][0][i-1],f[0][1][i-1]);
}
else
{
f[1][1][i]=min(f[1][0][i-1],f[0][1][i-1]);
f[0][1][i]=f[0][0][i-1];
f[0][0][i]=w[i]+f[0][1][i-1];
f[1][0][i]=w[i]+min(f[1][1][i-1],f[0][0][i-1]);
}
}
cout<<min(f[1][0][n],f[1][1][n]);
}
img