【Atcoder训练记录】AtCoder Beginner Contest 389
训练情况
赛后反思
赛后VP的,C题忘记vector里面erase复杂度是 O(n) 的了,导致TLE了两发,换成双端deque就过了
A题
取字符串第一位和第三位取int相乘
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
string s; cin>>s;
int x = s[0] - '0';
int y = s[2] - '0';
cout<<x*y<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
B题
求最小的 \(n\),使得 \(n! \ge x\),用while语句,每次乘 \(i++\),直到答案超过 \(x\) 停止,输出当前的 \(i\) 即可
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
int ans = 1;
int i = 2;
while(i*ans<x){
ans*=i;
i++;
}
cout<<i<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
C题
双端队列+前缀和,我们维护蛇的长度的前缀和,求蛇头的位置就是上一头的蛇尾位置,每次出队删除的时候记录一下长度,在输出的时候减掉出队的部分即可
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve(){
int q; cin>>q;
deque<int> a;
int now = 0;
int jian = 0;
while(q--){
int opt; cin>>opt;
if(opt == 1){
int l; cin>>l;
now += l;
a.push_back(now);
} else if(opt == 2){
jian = a[0];
a.pop_front();
} else if(opt == 3){
int k; cin>>k;
if(k==1) cout<<0<<endl;
else cout<<a[k-2]-jian<<endl;
}
}
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
D题
我们画一个半径逐渐扩大的圆,我们发现对答案的贡献一定是 \(4\) 的倍数,所以我们只需要判断最右端能到哪一个正方形即可,用勾股定理算能到最右端的哪个正方形,最后再对答案的贡献累加即可,记得开long long
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
int ans = 0;
for(double i = 0.5;i<x;i++){
ans += floor(sqrt(x*x-i*i)-0.5)*4;
}
cout<<ans+1<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App