当前位置: 首页 > news >正文

打卡信奥刷题(3292)用C++实现信奥题 P8976 「DTOI-4」排列

P8976 「DTOI-4」排列

题目背景

Update on 2023.2.1:新增一组针对 @yuanjiabao 的 Hack 数据,放置于 #21。

Update on 2023.2.2:新增一组针对 @CourtesyWei 和 @bizhidaojiaosha 的 Hack 数据,放置于 #22。


构造一个排列p pp,使得下标为奇数的项之和 ≥ a 且下标为偶数的项之和 ≥ b 。 \small\color{white}{下标为奇数的项之和 \geq a 且下标为偶数的项之和 \geq b。}下标为奇数的项之和a且下标为偶数的项之和b

题目描述

小 L 给你一个偶数n nn和两个整数a , b a, ba,b,请你构造一个长为n nn的排列p pp,使得其满足∑ i = 1 n 2 p i ≥ a \displaystyle\sum_{i = 1}^{\frac{n}{2}} p_i \geq ai=12npia∑ i = n 2 + 1 n p i ≥ b \displaystyle\sum_{i = \frac{n}{2} + 1}^{n} p_i \geq bi=2n+1npib

输入格式

本题有多组测试数据。

第一行,一个整数T TT,表示数据组数。

对于每组数据:

一行,三个整数n , a , b n, a, bn,a,b

输出格式

对于每组数据,如果无解,输出− 1 -11;否则,输出一行,n nn个整数,表示你构造出的排列p pp

如有多解,输出任意一组均可。

输入输出样例 #1

输入 #1

2 6 6 12 6 8 14

输出 #1

1 6 2 5 3 4 -1

说明/提示

本题开启 Special Judge。

Subtask \textbf{Subtask}Subtaskn nna , b a, ba,b分值
1 112 ≤ n ≤ 10 2 \leq n \leq 102n10无特殊限制20 pts ⁡ 20 \operatorname{pts}20pts
2 22无特殊限制a = b = 0 a = b = 0a=b=010 pts ⁡ 10 \operatorname{pts}10pts
3 33同上a = 0 a = 0a=0b = 0 b = 0b=010 pts ⁡ 10 \operatorname{pts}10pts
4 44同上无特殊限制60 pts ⁡ 60 \operatorname{pts}60pts

对于100 % 100\%100%的数据,2 ≤ n , ∑ n ≤ 10 5 2 \leq n, \sum n \leq 10^52n,n1050 ≤ a , b ≤ n ( n + 1 ) 2 0 \leq a, b \leq \frac{n(n + 1)}{2}0a,b2n(n+1)1 ≤ T ≤ 10 1 \leq T \leq 101T10n nn偶数

C++实现

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e5+5;intt;signedmain(){intt;cin>>t;while(t--){intn,a,b;cin>>n>>a>>b;intsum=(1+n/2)*n/4;if(sum>=a){//a选择1~n/2if((1+n)*n/2-sum<b)printf("-1\n");else{for(inti=1;i<=n;i++)printf("%d ",i);printf("\n");}continue;}intmovnum=(a-sum)/(n/2);//增加n/2的次数if(movnum>n/2||(movnum==n/2&&(a-sum)%(n/2))){//总操作次数不能大于n/2printf("-1\n");continue;}boolvis[N]={};//标记哪些数属于前半部分intsuma=0;for(inti=1;i<(n/2)-movnum;i++)suma+=i,vis[i]=1;suma+=(n/2)-movnum+(a-sum)%(n/2);vis[(n/2)-movnum+(a-sum)%(n/2)]=1;for(inti=(n/2)-movnum+1;i<=n/2;i++)suma+=i+n/2,vis[i+n/2]=1;if((1+n)*n/2-suma<b)printf("-1\n");else{for(inti=1;i<=n;i++)if(vis[i])printf("%d ",i);for(inti=1;i<=n;i++)if(!vis[i])printf("%d ",i);printf("\n");}}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.gsyq.cn/news/1350650.html

相关文章:

  • 2026年5月最新牡丹江宁安黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收
  • 第16章:Agent进阶之路与未来展望——成为智能体专家
  • SmoothQuant中LayerNorm前权重缩放约束
  • 企业内多个 AI 应用项目如何通过 Taotoken 实现统一的 API Key 管理与审计
  • 2026年5月最新牡丹江西安黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收
  • 进程管理器大横评:从 PM2 到 Systemd 的选型与实战
  • 【成都信息工程大学、澳门城市大学、四川工商学院和新加坡城市科学出版社《国际化教育科学与理论》期刊联合主办| 最快刊后1个月内上知网谷歌】第十届教育管理与社会科学国际学术会议(ISEMSS 2026)
  • public function getAttribute(string $key): mixed {的庖丁解牛
  • 2026年5月最新葫芦岛绥中黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • FlashAttention 深度解读:让大模型注意力机制“一口气算完“
  • 2026年5月最新杭州上城黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • ARM SVE向量化技术解析与性能优化实践
  • 2026年5月最新保定易县黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 【案例共创】CodeArts+SKILL 双引擎:AI 驱动 WEB 服务器极速部署
  • 3步搞定:m4s-converter让你的B站缓存视频重获新生
  • 3步搞定:m4s-converter让你的B站缓存视频重获新生
  • 三步解锁全网盘极速下载:免登录直链解析完整教程
  • AI驱动的模拟电路设计:MOBO优化与工程实践
  • 不同向量库索引的存储位置
  • 实力入选丨全知科技荣登嘶吼2026网络安全产业图谱
  • 基于DeepSeek模型的IP文案自动化生成工作流设计与实现
  • 2026年5月最新杭州桐庐黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • 2026年5月最新哈尔滨延寿黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • 技术人的黄金十年:软件测试从业者25到35岁每一年该怎么规划?
  • 2026年5月最新杭州西湖黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • 随机森林在智慧农业中的落地实践:从遥感数据到农事决策
  • CANN HCCL-COMM 通信拓扑感知:16卡训练时为什么 rank3 总是最慢的那张
  • 神作《盲视》,最硬核的反人类科幻,二十年前预言了AI的冰冷本质
  • 2026年5月最新常德津市黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 深度解析:Navicat Premium macOS版试用期无限重置的三种技术方案