小清新分讨题:CF2031C
小小的分讨题。
偶数
如果 为偶数,输出 1 1 2 2 3 3
,每组间隔均为 。
奇数
如果 为奇数,上面的方法会多出一个,考虑改造算法。
由于允许有两个以上同种面包,我们可以放置 个 号面包,剩下总数仍为偶数,如上即可。
三个面包的位置不能乱放。设第一个 号面包的坐标为 ,第二个为 ,第三个为 ,就要满足: ,, 均为完全平方数,且 ,这东西不就是勾股定理吗!于是用最小的勾股数的平方当它们的间隔即可。
终于结束了吗?没有,第一和第二个 号面包间隔 格,能填充满,但第二和第三个之间间隔 格,填不满。那该怎么办?
为什么一定要放里面呢?我们可以拆开一组,一个放里面,一个放外面,就填满了。
代码时间:
#include<bits/stdc++.h>
using namespace std;
int t, n;
int main(){
cin >> t;
while(t --){
cin >> n;
if((n & 1) && (n < 27)){//下面的表长 27 个数字,不够就无解
cout << "-1\n";
}
else if(n & 1){
cout << "1 2 2 3 3 4 4 5 5 1 6 6 7 7 8 8 9 9 10 10 11 11 13 12 12 1 13 ";//注意拆掉 13,使其刚好填满
for(int i = 14; i * 2 <= n; i ++) cout << i << " " << i << " ";//接着 14 填
cout << "\n";
}
else{
for(int i = 1; i * 2 <= n; i ++) cout << i << " " << i << " ";//偶数直接填
cout << "\n";
}
}
return 0;
}
posted on 2024-11-15 22:57 zhangzirui66 阅读(3) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】