img

牛客周赛 Round 4

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
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define frep(i,a,n) for(int i=a;i>=n;i--)
#define int long long
const int N=1e5+100;
#define PII pair<int,int>
#define lowbit(x) (x&(-x))
const int mod=1e9+7;
signed main()
{
int n,k;
cin>>n>>k;
if(k*3>n)
{
cout<<-1<<'\n';
return 0;
}
rep(i,1,k)
{
cout<<"you";
}
rep(i,3*k+1,n)
{
cout<<'u';
}
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
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define frep(i,a,n) for(int i=a;i>=n;i--)
#define int long long
const int N=1e5+100;
#define PII pair<int,int>
#define lowbit(x) (x&(-x))
const int mod=1e9+7;
signed main()
{
int n;
cin>>n;
if(n%3==0)
{
cout<<n/3-1<<'\n';
}
else
{
cout<<n/3*2;
}
return 0;
}

C

可以先考虑排序,有一个后面的变成负数,那么前面都会是0的,然后记录即可。

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
58
59
60
61
62
63
64
65
66
67
68
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define frep(i,a,n) for(int i=a;i>=n;i--)
#define int long long
const int N=1e5+100;
#define PII pair<int,int>
#define lowbit(x) (x&(-x))
const int mod=1e9+7;
const double pai=acos(-1.0);
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x) fixed<<setprecision(x)
int a[N];
//数据数组
int sum=1e9;
//需要记录一下最多减去的次数
int ans=0;
signed main()
{
ios;
int n,k;
cin>>n>>k;
rep(i,1,n)
{
cin>>a[i];
}
//有一个性质是如果排序了,后面的数字要变成0的话
//那么前面的数字一定会变成0的
//不妨先排个序,然后记录
//具体代码如下
sort(a+1,a+1+n);
int sum_x=0,sum_y=0;
int j=1;
rep(i,1,k)
{
int opt,x;
cin>>opt>>x;
if(opt==1)
{
sum_x+=x;
sum_y+=x;
}
else
{
sum_y-=x;
sum_x-=x;
while(j<=n&&a[j]+sum_y<=0)
{
j++;
}
if(sum_x<0)
{
sum_x=0;
//记录变为0加的值
}
}
}
int sum=0;
rep(i,j,n)
{
sum=(sum+a[i]%mod)%mod;
sum%mod;
}
sum=(sum+sum_y%mod*(n-j+1)%mod+sum_x%mod*(j-1)%mod)%mod;
cout<<sum<<'\n';
return 0;
}

D

直接用vector模拟即可

注意先放一个数的因子,再放一个数的因子,再乘起来就可以。

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
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define frep(i,a,n) for(int i=a;i>=n;i--)
const int N=1e5+100;
#define PII pair<int,int>
#define lowbit(x) (x&(-x))
const int mod=1e9+7;
vector<int>a;
vector<int>b;
vector<int>ans;
signed main()
{
int x,y;
cin>>x>>y;
rep(i,1,sqrt(x))
{
if(x%i==0)
{
a.push_back(i);
a.push_back(x/i);
}
}
rep(i,1,sqrt(y))
{
if(y%i==0)
{
b.push_back(i);
b.push_back(y/i);
}
}
rep(i,0,a.size()-1)
{
rep(j,0,b.size()-1)
{
ans.push_back(a[i]*b[j]);
}
}
sort(ans.begin(),ans.end());
ans.erase(unique(ans.begin(),ans.end()),ans.end());
cout<<ans.size()<<"\n";
rep(i,0,ans.size()-1)
cout<<ans[i]<<" ";
cout<<'\n';
return 0;
}
img