牛客周赛 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是个大模拟吧,没写,摸了...
本文作者:Ke_scholar
本文链接:https://www.cnblogs.com/Kescholar/p/17592429.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
OJ-牛客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步