Codeforces Round 957 (Div. 3)
知识点
1.几个数相乘时,更小的数增加会比更大的数增加得到的乘积来得大
题解
A. Only Pluses
1.几个数相乘时,当更小的数增大时,得到的乘积会比更大的数增大来得大,也就是更小的数字权重会比较大,那么在5次+1的过程中,每次找最小值++即可
#include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std; typedef pair<int,int> pii; #define x first #define y second #define all(v) v.begin(),v.end() int dx[]={0,1,-1,0}; int dy[]={-1,0,0,1}; void solve() { int a,b,c; cin>>a>>b>>c; int minn=1e9; for(int i=0;i<5;i++) { minn=min({a,b,c}); if(a==minn) a++; else if(b==minn) b++; else if(c==minn) c++; } cout<<a*b*c<<endl; } signed main() { ios::sync_with_stdio(0),cin.tie(0); int t=1; cin>>t; while(t--) solve(); return 0; }
B. Angry Monk
1.把元素从小到大排序以后,拆开那些不是1的,假设数字为k,需要k-1次,拆完以后,合并需要的次数为除最后一个元素外所有元素加起来
#include <bits/stdc++.h> using namespace std; #define int long long #define x first #define y second typedef pair<int,int> pii; #define all(v) v.begin(),v.end() int dx[]={0,1,-1,0}; int dy[]={-1,0,0,1}; signed main() { int t=1; cin>>t; while(t--) { int n,k; cin>>n>>k; vector<int>ve(k); for(int i=0;i<k;i++) cin>>ve[i]; sort(all(ve)); int ans=0,sum=0; for(int i=0;i<k-1;i++) { ans+=ve[i]-1; sum+=ve[i]; } ans+=sum; cout<<ans<<endl; } }
C. Gorilla and Permutation
1.简单的构造,只要让最大值排在第一个,可以保证fi的和尽量大,让m排在最后一个,可以保证gi的和尽量小,然后左边递减,右边递减,直到用完所有元素即可
#include <bits/stdc++.h> using namespace std; #define int long long #define x first #define y second typedef pair<int,int> pii; #define all(v) v.begin(),v.end() int dx[]={0,1,-1,0}; int dy[]={-1,0,0,1}; signed main() { int t=1; cin>>t; while(t--) { int n,m,k; cin>>n>>m>>k; int cnt=n-m; int te=n; int ts=1; for(int i=0;i<n-m;i++) cout<<te--<<" "; for(int i=0;i<m;i++) cout<<ts++<<" "; cout<<endl; } }
D. Test of Love
1.如果可以跳到岸边就直接跳,如果不行,我们就要寻找可以跳的木头,当下一个木头无法抵达的时候,跳到水里,就检查游泳的距离够不够,或者有无鳄鱼即可。尽可能跳的远以避开鳄鱼,并尽可能少游泳
#include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std; typedef pair<int,int> pii; #define x first #define y second #define all(v) v.begin(),v.end() int dx[]={0,1,-1,0}; int dy[]={-1,0,0,1}; void solve() { int n,m,k; cin>>n>>m>>k; string s; cin>>s; vector<int>p; for(int i=0;i<n;i++) { if(s[i]=='L') p.push_back(i); } p.push_back(n); int i=-1;//当前位置 int pos=0;//代表下一个木头的位置 while(i<n-1) { if(m>=p[pos]-i) i=p[pos]; //下一个木头的位置到当前位置的距离小于m else { i+=m;//跳不到下一个木头或者没木头直接跳到终点了 if(i>n-1){ cout<<"YES"<<endl; return ; } //到下一个木头前只能游泳 while(i<n&&i<p[pos]){ if(s[i]!='C'&&k>0){//当没有鳄鱼的时候可以游,且不能游超过k i++; k--; }else{ cout<<"NO"<<endl; return ; } } } pos++; } cout<<"YES"<<endl; } signed main() { ios::sync_with_stdio(0),cin.tie(0); int t=1; cin>>t; while(t--) solve(); return 0; }
posted on 2024-07-17 12:03 swj2529411658 阅读(10) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】