【CodeForces训练记录】Codeforces Round 1007 (Div. 2)
训练情况
赛后反思
放假降智了,逆天卡 A 题,还 WA 了一发,放假就会掉大分 TAT
A题
打表易得结论,直接手动枚举几个,发现有循环节,第 \(1,4,7,\cdots\) 可以为观众,其他都不可以
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
if((x-1) % 3 == 0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}
B题
发现自己乱搞做出来了,预处理一下完全平方数,我们构造一个 2 1 3 4 5 6 ... 这种数列,再求一次前缀和,如果前缀和为完全平方数,则当前位与下一位交换,会让前缀和多个 1,无解情况就是排列之和为完全平方数,这种情况无论如何排列最后一位前缀和都是完全平方数,直接输出 -1 即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e12;
map<int,int> v;
void pre(){
for(int i = 1;i*i<=N;i++) v[i*i] = 1;
}
void solve(){
int n; cin>>n;
if(n == 1 || v[(1ll+n)*n/2]){
cout<<-1<<endl;
return;
}
vector<int> a(n + 1),p(n + 1);
a[1] = 2;
a[2] = 1;
for(int i = 3;i<=n;i++) a[i] = i;
for(int i = 1;i<=n;i++) p[i] = p[i-1] + a[i];
for(int i = 1;i<=n;i++){
if(i<n&&v[p[i]]){
swap(a[i],a[i+1]);
}
}
for(int i = 1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
signed main(){
pre();
int T; cin>>T; while(T--)
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】