题目

有一个长度为 \(m\) 的书架,以及 \(n\) 个长度 \(a_1,a_2,\dots,a_n\)

Alessia 和 Bernardo 从书架上取书。每次由 Alessia 选择一个之前没选过的 \(i\),

并选择一个长度为 \(a_i\) 的区间,需要保证这个区间内的书全都没有被取过。然后 Bernardo 从区间内任意拿走一本书。

Bernardo 的目标是让 Alessia 某一步没有区间可选。输出谁赢,并交互构造方案。

\(n\leq 100,m\leq 5000\)


分析

引理:Alessia获胜当且仅当 \(a\) 降序排序后不存在 \(a_i>\lfloor\frac{m}{i}\rfloor\)

因为如果不存在,那么根据鸽笼原理每次必有一个区间长度大于等于 \(\lfloor\frac{m}{i}\rfloor\),必可选

否则若 \(\exists k,a_k>\lfloor\frac{m}{k}\rfloor\),让区间长度为 \(a_{1\sim k}\) 的区间选择的位置为 \(a_k\) 的倍数,其它任选。

因为 \(k>\lfloor\frac{m}{a_k}\rfloor\),必有一个位置是重复的


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=5011;
int n,m,s[N],a[N],v[N],o;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
int main(){
n=iut(); m=iut();
for (int i=1;i<=n;++i) a[i]=iut();
sort(a+1,a+1+n),reverse(a+1,a+1+n);
for (int i=1;i<=n;++i)
if (a[i]>m/i){
o=a[i];
break;
}
if (!o){
printf("Alessia\n"),fflush(stdout);
for (int i=1;i<=n;++i){
for (int j=1;j<=m;++j) s[j]=s[j-1]+v[j];
for (int j=a[i];j<=m;++j)
if (s[j]==s[j-a[i]]){
printf("%d %d\n",a[i],j-a[i]+1);
fflush(stdout);
break;
}
v[iut()]=1;
}
}else{
printf("Bernardo\n"),fflush(stdout);
for (int i=1;i<=n;++i){
int len=iut(),l=iut();
if (len>=o) printf("%d\n",(l+o-1)/o*o);
else printf("%d\n",l);
fflush(stdout);
}
}
return 0;
}

#交互,鸽笼原理#CF1776C Library game的更多相关文章

  1. HDU 5762 Teacher Bo (鸽笼原理) 2016杭电多校联合第三场

    题目:传送门. 题意:平面上有n个点,问是否存在四个点 (A,B,C,D)(A<B,C<D,A≠CorB≠D)使得AB的横纵坐标差的绝对值的和等于CD的横纵坐标差的绝对值的和,n<1 ...

  2. Gym 100851G Generators (vector+鸽笼原理)

    Problem G. Generators Input file: generators.in Output file: generators.outLittle Roman is studying li ...

  3. POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)

    描述 http://poj.org/problem?id=1065 木棍有重量 w 和长度 l 两种属性,要使 l 和 w 同时单调不降,否则切割机器就要停一次,问最少停多少次(开始时停一次). Wo ...

  4. poj 3370 鸽笼原理知识小结

    中学就听说过抽屉原理,可惜一直没机会见识,现在这题有鸽笼原理的结论,但其实知不知道鸽笼原理都可以做 先总结一下鸽笼原理: 有n+1件或n+1件以上的物品要放到n个抽屉中,那么至少有一个抽屉里有两个或两 ...

  5. poj 2356鸽笼原理水题

    关于鸽笼原理的知识看我写的另一篇博客 http://blog.csdn.net/u011026968/article/details/11564841 (需要说明的是,我写的代码在有答案时就输出结果了 ...

  6. UVA 10620 - A Flea on a Chessboard(鸽笼原理)

    UVA 10620 - A Flea on a Chessboard 题目链接 题意:给定一个跳蚤位置和移动方向.如今在一个国际象棋棋盘上,左下角为黑格,一个格子为s*s,推断是否能移动到白格子.问要 ...

  7. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...

  8. CodeChef February Challenge 2018 Points Inside A Polygon (鸽笼原理)

    题目链接  Points Inside A Polygon 题意  给定一个$n$个点的凸多边形,求出$[ \frac{n}{10}]\ $个凸多边形内的整点. 把$n$个点分成$4$类: 横坐标奇, ...

  9. 1393 0和1相等串 鸽笼原理 || 化简dp公式

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1393 正解一眼看出来的应该是鸽笼原理.记录每个位置的前缀和,就是dp[i ...

  10. 基于Apache Thrift的公路涵洞数据交互实现原理

    基于Apache Thrift的公路涵洞数据交互实现原理 Apache Thrift简介 Apache Thrift(以下简称为“Thrift”) 是 Facebook 实现的一种高效的.支持多种编程 ...

随机推荐

  1. win32 - 虚拟内存的一些介绍

    对32位Windows来说,其虚拟地址空间总数就是2的32次方,即4GB. 如果没有在引导时加上/3GB或/BOOTVA选项,Windows默认最大会分2GB给内核模式程序使用,2GB给用户模式程序. ...

  2. golang常用库:gorilla/mux-http路由库使用

    golang常用库:gorilla/mux-http路由库使用 golang常用库:配置文件解析库/管理工具-viper使用 golang常用库:操作数据库的orm框架-gorm基本使用 一:gola ...

  3. Telegraph多线程下载器v0.5--tkinter

    介绍 最近在拿python写一点小工具,结合之前的多线程.线程池技术做了个GUI版的Telegraph图册批量下载工具. 因为开发平台是在Mac,虽然对Windows平台的也进行了打包,但最垃圾的Wi ...

  4. FFmpeg开发笔记(七):ffmpeg解码音频保存为PCM并使用软件播放

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. 【LeetCode二叉树#14】验证二叉搜索树(巩固迭代中序遍历#1)

    验证二叉搜索树 力扣题目链接(opens new window) 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子 ...

  6. 【Filament】基于物理的光照(PBR)

    1 前言 ​ 自定义Blinn Phong光照模型中实现了基础的自定义光照,与现实的光照还是有些差别,本文将实现更逼真的光照效果,即基于物理的光照(PBR). ​ 读者如果对 Filament 不太熟 ...

  7. Android 安装手机程序有问题/点击runAPP 程序安装不了手机

    可以在 gradle.properties 里添加   android.injected.testOnly=false   点击同步  就可以运行了 如下:

  8. vue3 如果用ts,导出时候要用 defineComponent,这俩是配对的,为了类型的审查正确

    vue3 如果用ts,导出时候要用 defineComponent,这俩是配对的,为了类型的审查正确

  9. linux-给终端建立快捷键

    在设置里,找到快捷键窗口,自定义快捷键, 名字:终端 命令:gnome-terminal 快捷键:ctrl+alt+t

  10. python 读取txt并绘制波形图实例解析

    一 用python绘图有很多方法,笔者找到了一种最简单的方法,使用非常便利,这里分享一下: import numpy as np import matplotlib.pyplot as plt a = ...