题意

传送门

给定 \(2n\) 个数 \(1,2,\dots,2n\),A 和 B 进行交互,如下规则:

  • A 需要将元素分成 \(n\) 组 \(\texttt{pair}\);
  • B 从每组 \(\texttt{pair}\) 中选择一个元素,如果权值和是 \(2n\) 的倍数则 B 胜,否则 A 胜。

你需要选择 AB 中的一者扮演角色,并取得胜利。

\(1\le n\le 5\times 10^5\)。

题解

构造题是一点都不会……如果省选的试场上出现一道较简单的构造,那真是亏大了。接下来多做点 CF 的构造吧。

若为 A,我们希望 B 的权值和在模 \(2n\) 意义下变化少一些。于是尝试这样的构造:\(i\) 与 \(i+n\)。那么权值和为 \(\frac{n(n+1)}{2}+kn=n(\frac{n+1}{2}+k)\)。则 \(n\) 为偶数时一定可以。接下来考虑 \(n\) 为奇数。

若为 B,若我们取的数在模 \(n\) 意义下为 \(0,1,\dots,n-1\),则和为 \(\frac{n(n-1)}{2}+kn=n(\frac{n-1}{2}+k)\)。若后部为偶数,则得解;否则每组取另一个,和为 \(n(2n+1-\frac{n-1}{2}-k)\),也得解。接下来考虑如何取数。

依次考虑 \(i\) 与 \(i+n\)。先取 \(i\),若 \(i\) 与 \(i+n\) 同组,则变为一个子问题。否则不妨设 \(j\le n\) 与 \(i\) 同组,则 \(j\) 不取,\(j+n\) 必须取。类似匈牙利算法找增广路的过程,可以保证找到一组解。

最新文章

  1. Flask-RESTful 快速入门
  2. 矩阵求逆算法及程序实现(C++)
  3. php上传文件大小限制修改
  4. 【BZOJ】1110: [POI2007]砝码Odw
  5. maven环境快速搭建
  6. TCP/IP详解 笔记十
  7. WordPress实现长篇文章/日志/单页面分页功能效果
  8. 支持多种浏览器的纯css下拉菜单
  9. objective-c中使用cocoa的NSPredicate,谓词(十四)
  10. (转)Hessian(C#)介绍及使用说明
  11. 编译Linux系统下的jrtplib3.9和jthread1.3(arm和ubuntu)
  12. 格式化URL
  13. NET站点Web部署
  14. BZOJ 3674 可持久化并查集加强版 可持久化并查集
  15. Struts2中实现文件上传的功能
  16. appium desktop 版本发布
  17. intellij idea的安装步骤---经典
  18. linux 环境下安装oracle11g方法及安装过程中遇上的问题解决方法
  19. BlockChain 的跨链技术的重要性和必要性
  20. Nginx SSL TLS部署最佳实践

热门文章

  1. C/C++随堂笔记
  2. [python]《Python编程快速上手:让繁琐工作自动化》学习笔记5
  3. [1]SpinalHDL安装环境
  4. Spring Cloud服务发现组件Eureka
  5. 2023牛客寒假算法基础集训营1 ACDEFGHKLM
  6. Python 内置界面开发框架 Tkinter入门篇 乙
  7. Blazor入门100天 : 身份验证和授权 (2) - 角色/组件/特性/过程逻辑
  8. drf-序列化字段及参数、序列化和反序列化高级用法、ModelSerializer使用
  9. DataGrid 设置某列可见或只读
  10. STM32F1库函数初始化系列:定时器中断