AtCoder Beginner Contest 333
ABC333 总结
https://atcoder.jp/contests/abc333
A - Three Threes
翻译
输入一个正整数
分析
没啥好说的,直接输出就好了。
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int main ()
{
cin>>n;
for(int i=1;i<=n;i++) cout<<n;
return 0;
}
B - Pentagon
翻译
给出两条线段,保证它们的端点均为正五边形
分析
设两端点字母的差的绝对值分别为
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
string a,b;
int main ()
{
cin>>a>>b;
int x=abs(a[1]-a[0]);
int yr=abs(b[1]-b[0]);
if(x==y||x+y==5) cout<<"Yes";
else cout<<"No";
return 0;
}
C - Repunit Trio
翻译
「repunit 数」是指由若干个
输出所有能够表示为
分析
for
,将所有情况都求出来,然后排序,最后也可以打表,也可以就这么暴力。
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,t,a[15],x[15],b[15],c[15],ans[3333];
int main ()
{
cin>>n;
a[0]=b[0]=c[0]=1;
x[1]=10;
for(int i=2;i<=12;i++) x[i]=x[i-1]*10;
for(int i=1;i<=12;i++) a[i]=a[i-1]+x[i],b[i]=c[i]=a[i];
int tot=0;
for(int i=0;i<=12;i++)
for(int j=0;j<=12;j++)
for(int k=0;k<=12;k++)
{
tot++;
ans[tot]=a[i]+b[j]+c[k];
}
sort(ans+1,ans+tot);
tot=unique(ans+1,ans+tot)-ans;
cout<<ans[n];
return 0;
}
D - Erase Leaves
翻译
给定一颗
分析
要能够删除
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+5;
int n,m,t,ans=0,cnt;
int head[N<<1],ver[N<<1],tot=1,ne[N<<1];
void add(int x,int y)
{
ver[++tot]=y,ne[tot]=head[x],head[x]=tot;
}
void dfs(int u,int fa)
{
cnt++;
for(int i=head[u];i;i=ne[i])
{
int v=ver[i];
if(v==fa) continue;
dfs(v,u);
}
}
int main ()
{
cin>>n;
int m=n-1,x,y;
while(m--)
{
cin>>x>>y;
add(x,y);
add(y,x);
}
for(int i=head[1];i;i=ne[i])
{
int v=ver[i];
cnt=0;
dfs(v,1);
ans=max(ans,cnt);
}
cout<<n-ans<<"\n";
return 0;
}
E - Takahashi Quest
翻译
Takahashi 在进行一次冒险。
在第
- 若
,则表示这里有一个 魔法的药水。Takahashi 可以选择捡起会不捡起; - 若
,则表示这里有一个 魔法的怪兽,需要用一个 魔法的药水才能打败。
你需要求出,在 Takahashi 能打败所有怪兽的情况下,每个时刻手中的药水瓶数的最大值最小是多少。若不能打败所有怪兽输出
分析
要想使得每个时刻手中的药水瓶数的最大值最小,那么就要尽可能把越晚获得的药水消耗掉,后进先出,可以用栈来维护。用 -1
。
后面统计答案就是从头再来一遍,模拟即可。
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int n,m,t[N],v[N];
stack<int> a[N];
int main ()
{
cin>>n;
for(int i=1,x;i<=n;i++)
{
cin>>t[i]>>x;
if(t[i]==1) a[x].push(i);
else
{
if(a[x].empty())
{
cout<<-1<<"\n";
return 0;
}
v[a[x].top()]=1;
a[x].pop();
}
}
int ans=0;
for(int i=1,cnt=0;i<=n;i++)
{
if(v[i]==1) cnt++,ans=max(ans,cnt);
else if(t[i]==2) cnt--;
}
cout<<ans<<"\n";
for(int i=1;i<=n;i++) if(t[i]==1) cout<<v[i]<<" ";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧