23暑假友谊赛No.2
23暑假友谊赛No.2
A-雨_23暑假友谊赛No.2 (nowcoder.com)
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);cin.tie(nullptr);
int a,b,c,d,x;
cin >> a >> b >> c >> d >> x;
cout << (a > x ? 0 : x - a) << ' ' << (b > x ? 0 : x - b) << ' ' << (c > x ? 0 : x - c)<< " " << (d > x ? 0 : x - d);
return 0;
}
B-吻_23暑假友谊赛No.2 (nowcoder.com)
啊,忘了加后取模,我真傻,真的.
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
ios::sync_with_stdio(false);cin.tie(nullptr);
const int mod = 998244353;
int n;
cin >> n;
n %= mod;
cout << (n % mod + n % mod * (n - 1) % mod) % mod << endl;
return 0;
}
C-失_23暑假友谊赛No.2 (nowcoder.com)
模拟
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
ios::sync_with_stdio(false);cin.tie(nullptr);
string s;
int n;
cin >> s >> n;
vector<string> ans(n);
for(auto &i : ans) cin >> i;
vector<int> k(n);
for(int i = 0;i < n;i ++){
if(ans[i].size() != s.size()){
k[i] = 0;
}else{
for(int j = 0;j < s.size();j ++)
k[i] += (ans[i][j] == s[j]);
}
}
vector<string> res;
int m = *max_element(k.begin(),k.end());
for(int i = 0;i < n;i ++){
if(k[i] == m)
res.emplace_back(ans[i]);
}
sort(res.begin(),res.end());
for(auto i : res)
cout << i << endl;
return 0;
}
D-吹_23暑假友谊赛No.2 (nowcoder.com)(动态规划)
\(dp[i][0/1]\)表示当前数为1或原数时的最大可爱值.
若当前数为1,则它的最大值为它左边为1的可爱值或为原数时加上原数 - 1的可爱值
若当前数为原数,则它的最大值为左边为1加上当前数 - 1 或 为 原数时加上原数与当前数的差的绝对值
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
ios::sync_with_stdio(false);cin.tie(nullptr);
int n;
cin >> n;
vector<int> a(n);
for(auto &i : a) cin >>i ;
vector dp(n,vector<int>(2,0));
for(int i = 1;i < n;i ++){
dp[i][0] = max(dp[i - 1][0],dp[i - 1][1] + abs(a[i - 1] - 1)) ;
dp[i][1] = max(dp[i - 1][0] + abs(a[i] - 1), dp[i - 1][1] + abs(a[i - 1] - a[i]));
}
cout << max(dp[n - 1][0],dp[n - 1][1]) << endl;
return 0;
}
E-唤_23暑假友谊赛No.2 (nowcoder.com)
首先边长为4,5,6的纸片都各需要一个正方形边框,而一个正方形边框可以装4个边长为3的纸片,边长为2和1的纸片可以放在这些纸片的空隙中,需要特殊处理.
一个边长为4的纸片可以放5个边长为2的,四个边长为3的纸片放不了边长为2的,一个边长为3的可以放5个,二个边长为3的可以放3个,三个边长为3的可以放1个,处理出当前有多少空隙可以放边长为2的纸片后继续处理边长为1的.
边长为1的只要看当前的边框面积减去已放入的纸片的面积,剩下的面积都能放边长为1的,比较一下看看还需不需要再继续加边框即可
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
ios::sync_with_stdio(false);cin.tie(nullptr);
int T;
cin >> T;
while(T--){
int s;
cin >> s;
int s3[] = {0,5,3,1};
vector<int> k(7);
for(int i = 1;i <= 6;i ++) cin >> k[i];
int ans = 0;
ans += k[6] + k[5] + k[4] + (k[3] + 3) / 4;
int num2 = 5 * k[4] + s3[k[3] % 4];
if(k[2] > num2)
ans += (k[2] - num2 + 8) / 9;
int sum = ans * 36 - k[6] * 36 - k[5] * 25 - k[4] * 16 - k[3] * 9 - k[2] * 4;
if(k[1] > sum)
ans += (k[1] - sum + 35) / 36;
cout << (ans > s ? "No" : "Yes") << endl;
}
return 0;
}