牛客周赛 Round 4
牛客周赛 Round 4
A-游游的字符串构造_牛客周赛 Round 4 (nowcoder.com)
先把几个\('you'\)输出,剩下的随便输出
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,m;
cin >>n >> m;
if(n < m * 3){
cout << -1 << endl;
}else{
for(int i = 0;i < m;i ++)
cout << "you";
for(int i = 0; i < n - m * 3;i ++)
cout << 'y';
}
return 0;
}
B-游游的整数拆分_牛客周赛 Round 4 (nowcoder.com)
要满足\(a+b=n\) 并且 $a \cdot b $是\(3\)的倍数,\(n\)是\(3\)的倍数时,\(a,b\)同时为\(3\)的倍数会导致重复计算,答案就是\([1,n)\)里的所有\(3\)的倍数;\(n\)不是\(3\)的倍数时,\(a,b\)不同时为\(3\),所以可以互换,答案就是前面答案的两倍
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
if(n % 3 == 0)
cout << (n - 1)/ 3 << endl;
else
cout << (n - 1) / 3 * 2 << endl;
return 0;
}
C-游游的整数操作_牛客周赛 Round 4 (nowcoder.com)
操作1的贡献是\(n \times x\),操作2的贡献在非负的情况下的贡献为\(-n\times x\),对于原数组,我们可以让所有数减去最小值,使得所有数非负,然后去用\(sum\)去记录操作1的贡献,判断操作2的贡献能否用用\(sum\)抵消掉,若不能抵消则说明这个时候肯定会使原数组元素小于0了,我们用一个\(cha\)去记录这个多出来的值,留在最后一并减掉,最后答案就是原数组加一遍再加上\(sum \times n\),记得取模.
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main() {
int n,k;
cin >> n >> k;
vector<int> a(n);
for(auto &i : a) cin >> i;
int mi = *min_element(a.begin(), a.end());
int sum = mi, cha = 0;
const int mod = 1e9 + 7;
while(k--){
int op,x;
cin >> op >> x;
if(op == 1){
sum += x;
}else{
if(x <= sum)
sum -= x;
else{
cha += x - sum;
sum = 0;
}
}
}
for(auto &i : a)
i = max(i - mi - cha, 0ll);
int ans = 0;
for(auto i : a) ans += i;
ans = (ans % mod + sum % mod * n) % mod;
cout << ans << endl;
return 0;
}
D-游游的因子计算_牛客周赛 Round 4 (nowcoder.com)
就是把\(a,b\)分别算出它们的因子,以及它们因子的乘积,若 \(i\)能被\(a\)整除,\(j\)能被\(b\)整除,则\(i\times j\)也一定能被\(a \times b\)整除
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a,b;
cin >> a >> b;
int n = a,m = b;
set<int> ans;
vector<int> p,q;
for(int i = 1;i <= sqrt(b) ; i++){
if(b % i == 0){
p.push_back(i);
if(i * i != b)
p.push_back(b / i);
}
}
for(int i = 1;i <= sqrt(a) ; i++){
if(a % i == 0){
q.push_back(i);
if(i * i != a)
q.push_back(a / i);
}
}
for(auto i : p){
for(auto j : q){
ans.insert(i * j);
}
}
cout << ans.size() << endl;
for(auto i : ans)
cout << i << ' ';
return 0;
}
E是个大模拟吧,没写,摸了...