CodeForces Round 957 (Div3)
蒟蒻找了一些简单题做了而已,别太在意……
比赛链接
A. Only Pluses
题意
三个正整数
每次操作:
- 选取
中任意一个数,将这个数加上一。
要求最大化
思路
很直接的贪心题。
假设有三个正整数
要使乘积最大,那么这个加一的数一定是
以此类推,五次操作中,我们必须贪心地选取
为了省时省力,我们可以用小根堆来维护。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t,ans=1;cin>>t;
priority_queue<int,vector<int>,greater<int> >q;
while(t--){
ans=1;for(int i=1,x;i<=3;i++)cin>>x,q.push(x);
for(int i=1,t;i<=5;i++)
t=q.top(),q.pop(),t++,q.push(t);
for(int i=1;i<=3;i++)ans*=q.top(),q.pop();
cout<<ans<<endl;
}
return 0;
}
B. Angry Monk
题意
给定长度为
-
选定一个
,将其分裂成 和 。 -
选定
和 ,满足 ,将 和 合并为一个 。
求将序列长度变为
思路
依然是贪心。
如果两个数可以合并,当且仅当其中一个数为
考虑
以此类推,我们可以将序列先排序,把其中最小的
这样就能做了。
但继续想想,可以想到一个公式:
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a[100001];
void solve(){
cin>>n>>k;for(int i=1;i<=k;i++)cin>>a[i];
sort(a+1,a+k+1);
cout<<n-a[k]-(k-1)+n-a[k]<<endl;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;cin>>t;while(t--)solve();
return 0;
}
C. Gorilla and Permutation
题意
给定正整数
需要求一个
思路
依然是贪心。
在求两个正整数的最大差时,有一种思路就是在最大化被减数的同时最小化减数,这道题就可以用这种思路。
首先考虑如何最大化
其次考虑如何最小化
注意到
直白地,对于给定的
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
int n,m,k;cin>>n>>m>>k;
for(int i=n;i>m;i--)cout<<i<<' ';
for(int i=1;i<=m;i++)cout<<i<<' ';
cout<<endl;
}
return 0;
}
D. Test of Love
题意
A 愿意为 B 做任何事,甚至游过鳄鱼出没的沼泽。我们决定考验一下这份爱。A 必须游过一条长
最初,A 在左岸,需要到达右岸。它们分别位于
- 如果他在岸上或在圆木上,他可以向前跳不超过
米。 - 如果他在水里,他只能游到下一个河段(或者如果他在第
米处,他只能游到河岸)。 - A 在任何情况下都不能带着鳄鱼降落在分段上
确定 A 是否能到达右岸。
思路
模拟贪心,好像很多 Div3 的题都是这样。
先来个分类讨论,假设当前为
-
'L',那么他可以向前跳最多 格,因为他最多只能游 格,所以我们可以贪心地尽量选择圆木。如果往后的 格都没有圆木,那么就跳进离 最远的水里。如果连水都没有,只有鳄鱼,那么输出NO
。 -
'W',那么操作就很简单了,直接从 开始向后枚举,如果可以到达圆木,那么就站在圆木上,如果到达不了,那么输出NO
。
我们可以把
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
char c[200005];
void solve(){
memset(c,0,sizeof(c));
cin>>n>>m>>k;c[0]='L',c[n+1]='L';
for(int i=1;i<=n;i++)cin>>c[i];
for(int i=0;i<=n+1;){
bool b=0;
if(i==n+1){cout<<"YES"<<endl;return;}
if(c[i]=='W'){
for(int j=i+1,l=1;j<=n+1;l++,j++){
if(c[j]=='C'){cout<<"NO"<<endl;return;}
if(c[j]=='L'){
k-=l;
if(k<0){cout<<"NO"<<endl;return;}
i=j;break;
}
}
continue;
}
for(int j=min(i+m,n+1);j>=i+1;j--)if(c[j]=='L'){i=j;b=1;break;}
if(b)continue;
for(int j=min(i+m,n+1);j>=i+1;j--)if(c[j]=='W'){i=j;b=1;break;}
if(b)continue;
cout<<"NO"<<endl;return;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;cin>>t;while(t--)solve();
return 0;
}
E. Novice's Mistake
题意
对于一个只含数字字符的字符串
。
思路
很直接,小模拟。
如果
注意到,若要满足上述条件,那么
枚举
注意细节,具体见代码。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
int n;cin>>n;int x[601],cnt=601,k=0,sum=0,o=n,p;
if(n==1){
cout<<9999<<endl;
for(int i=1;i<=9999;i++)cout<<i+1<<' '<<i<<endl;
continue;
}
while(o)sum++,o/=10;vector<pair<int,int>>v;
for(int i=1;i<=6;i++){int u=n;while(u)x[--cnt]=u%10,u/=10;}
for(int i=cnt,l=1;i<=600;i++,l++){
k=k*10+x[i];if(k>10000*n)break;
if((k-l)%(n-sum)==0){
int a=(k-l)/(n-sum);
if(a==0||a*sum-l==0)continue;
v.push_back(make_pair(a,a*sum-l));
}
}
cout<<(p=v.size())<<endl;
for(int i=0;i<p;i++)cout<<v[i].first<<' '<<v[i].second<<endl;
}
return 0;
}
F. Valuable Cards
题意
给定序列
- 在这一块中挑选若干个整数,使得它们的乘积不可能为
。
最小化块数。
思路
很直接的贪心(吧)。因为块数要越少越好,所以每一块中的元素应当越多越好。
我们先将
每一次枚举过后都要考虑查询中有没有 ans++
。
我们定义一个 unordered_map
来完成上述操作。由于 unordered_map
的平均复杂度为
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x,a[100001];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
int ans=0,cnt=0;int num[1001];
cin>>n>>x;for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=x;i++)if(x%i==0)num[++cnt]=i;
for(int i=1;i<=n;i++){
ans++;unordered_map<int,bool>p;
for(int j=i;j<=n;j++){
vector<int>v;
for(int k=1;k<=cnt;k++){
if(num[k]%a[j]==0&&p.count(num[k]/a[j]))
v.push_back(num[k]);
}
for(int i=0;i<v.size();i++)p.emplace(v[i],0);
p.emplace(a[j],0);
if(p.count(x)){i=j-1;break;}
else if(j==n){i=j;break;}
}
}
cout<<ans<<endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】