ABC364 题解
A
直接模拟。
注意到 Yes
。
#include<bits/stdc++.h>
using namespace std;
int n;
string s,t;
int main(){
cin>>n;
s="";
for(int i=1;i<=n;i++){
t=s;
cin>>s;
if(s=="sweet"&&t=="sweet"&&i!=n){
cout<<"No";
return 0;
}
}
cout<<"Yes";
return 0;
}
B
模拟即可。
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y;
char ch[55][55];
const int dx[5]={0,0,0,-1,1};
const int dy[5]={0,-1,1,0,0};
int getint(char ch){
if(ch=='L')return 1;
if(ch=='R')return 2;
if(ch=='U')return 3;
if(ch=='D')return 4;
return 0;
}
string s;
int main(){
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>ch[i][j];
}
}
cin>>s;
for(int i=0;i<s.length();i++){
int gi=getint(s[i]);
int nx=x+dx[gi],ny=y+dy[gi];
if(nx<1||nx>n||ny<1||ny>m)continue;
if(ch[nx][ny]=='#')continue;
x=nx;
y=ny;
}
cout<<x<<' '<<y;
return 0;
}
C
简单贪心。
要么让他吃最多的甜,要么吃最多的咸。
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
}a[200005];
int n;
long long sum1,sum2,x,y;
int cmp1(node _,node __){
return _.x>__.x;
}
int cmp2(node _,node __){
return _.y>__.y;
}
int ans1,ans2;
int main(){
scanf("%d%lld%lld",&n,&x,&y);
ans1=n;
ans2=n;
for(int i=1;i<=n;i++)scanf("%d",&a[i].x);
for(int i=1;i<=n;i++)scanf("%d",&a[i].y);
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++){
sum1+=a[i].x;
sum2+=a[i].y;
if(sum1>x||sum2>y){
ans1=i;
break;
}
}
sum1=0;
sum2=0;
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++){
sum1+=a[i].x;
sum2+=a[i].y;
if(sum1>x||sum2>y){
ans2=i;
break;
}
}
cout<<min(ans1,ans2);
return 0;
}
D
二分答案
在
复杂度带
注意
#include<bits/stdc++.h>
using namespace std;
int n,a[200005],m;
struct node{
int id,x,k,ans;
}b[200005];
int cmp(node _,node __){
return _.x<__.x;
}
int cmp2(node _,node __){
return _.id<__.id;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++){
scanf("%d%d",&b[i].x,&b[i].k);
b[i].id=i;
}
n++;
a[n]=2147483647;
sort(a+1,a+n+1);
sort(b+1,b+m+1,cmp);
for(int i=1;i<=m;i++){
long long l=0,r=400000000,mid,ans=0;
while(l<r){
mid=(l+r)>>1;
int ll=lower_bound(a+1,a+n+1,b[i].x-mid)-a;
int rr=lower_bound(a+1,a+n+1,b[i].x+mid+1)-a;
rr--;
int len=(rr-ll+1);
if(len>=b[i].k){
ans=mid;
r=mid;
}
else l=mid+1;
}
b[i].ans=ans;
}
sort(b+1,b+m+1,cmp2);
for(int i=1;i<=m;i++){
printf("%d\n",b[i].ans);
}
return 0;
}
E-G
等我补完再说。
后记
在 ABC364 中,我吸取了以下教训:
- 我们要看清数据范围,不要因为 D 的
初始值的错误调半小时。 - 我们要注意厕所的使用。
- 我们要注意《星芒》的使用。这首歌会让我想到羊守七的小巴,如此勇敢坚强,导致我最后写出了 D。
分类:
个人记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】