这题也太新颖了吧.. 交互博弈 以前一直以为交互只能出二分

题意:长度为n的环形灯 玩家有两种操作 结束游戏 或者选择k个灯点亮 每次这个k是玩家自己选的

   玩家操作后让电脑操作 电脑选择一个最优的点x 然后关掉从x开始的连续k个灯

   玩家想要点亮更多的灯 电脑则相反

   让你来操作 如果达到了理论上最多灯的状态就算ac了

题解:模拟一下操作就找到规律了..

   如果玩家上一次操作点亮了k个灯 如果当前连续亮灯的最长序列为x <= k

   那么电脑操作了之后 至少会多点亮一个灯 就这样一直贪心下去..

   所以我们一开始枚举 最长的连续亮灯长度

   举个例子枚举的最长是2 就类似110110110.. 的把每个灯标记 1就标记为最后要点亮的灯

   再比如n=11的时候 枚举的最长=2 11011011010 注意n和1相邻一定为0

   然后模拟一下就发现这种情况 能最多点亮5个 = (n/3)*(2) + (n%3-1) - 2

   k = 7 11011011010 -> 00000001010

   k = 5 11011011010 -> 00000011010

   k = 4 11011011010 -> 00001011010

   k = 3 11011011010 -> 00011011010

   之后无论如何也不能点亮更多灯了

   然后枚举每一个长度 选一个最优的

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <string.h>
#include <string>
using namespace std; int vis[1005];
int now[1005];
vector<int> g;
int main() {
int n;
cin>>n; int ans = 0;
int fz = 2;
for(int i = 2; i <= n / 2; i++) {
int res = (n / i) * (i - 1);
if(n % i != 0) res += n % i - 1;
res -= (i - 1);
if(res > ans) ans = res, fz = i;
}
//cout << ans << endl;
for(int i = 1; i <= n; i++) if(i % fz) vis[i] = 1;
vis[n] = 0; int lask = 0;
int x = 0;
while(1) {
if(x == -1) break;
int rr = 0;
int pos = x;
while(lask--) {
now[pos] = 0;
pos++;
if(pos > n) pos = 1;
}
for(int i = 1; i <= n; i++) if(now[i]) rr++; if(rr >= ans) {
puts("0");
cout.flush();
break;
} g.clear();
for(int i = 1; i <= n; i++) {
if(!now[i] && vis[i]) {
now[i] = 1;
g.push_back(i);
}
}
lask = g.size();
printf("%d", lask);
for(int i = 0; i < lask; i++) printf(" %d", g[i]); puts("");
cout.flush();
cin>>x;
}
return 0;
}

  

Codeforces 1368F - Lamps on a Circle (交互博弈)的更多相关文章

  1. Codeforces 549C The Game Of Parity【博弈】

    C语言纠错大赛的一道题,正好拿来补博弈~~ 给的代码写的略奇葩..不过还是直接在上面改了.. 题目链接: http://codeforces.com/problemset/problem/549/C ...

  2. Codeforces 388C Fox and Card Game (贪心博弈)

    Codeforces Round #228 (Div. 1) 题目链接:C. Fox and Card Game Fox Ciel is playing a card game with her fr ...

  3. codeforces 455B A Lot of Games(博弈,字典树)

    题目 参考自博客:http://blog.csdn.net/keshuai19940722/article/details/38455269 //字典树,博弈 根据当前节点的后续来确定当前节点的状态, ...

  4. codeforces 679A Bear and Prime 100 交互

    第一次交互题,记录一下吧 #include <cstdio> #include <iostream> #include <ctime> #include <v ...

  5. Codeforces 897D. Ithea Plays With Chtholly (交互)

    题目链接:D. Ithea Plays With Chtholly 题意: 给你n张纸,在纸上写字(在 1 - c之间)可以写m次数 (,).(主要是交互,让你判断) 题解: 首先,看到m>=n ...

  6. [Educational Round 10][Codeforces 652F. Ants on a Circle]

    题目连接:652F - Ants on a Circle 题目大意:\(n\)个蚂蚁在一个大小为\(m\)的圆上,每个蚂蚁有他的初始位置及初始面向,每个单位时间蚂蚁会朝着当前面向移动一个单位长度,在遇 ...

  7. Vladik and Favorite Game CodeForces - 811D (思维+BFS+模拟+交互题)

    D. Vladik and Favorite Game time limit per test 2 seconds memory limit per test 256 megabytes input ...

  8. Codeforces Round #281 (Div. 2) D(简单博弈)

    题目:http://codeforces.com/problemset/problem/493/D 题意:一个n*n的地图,有两个人在比赛,第一个人是白皇后开始在(1,1)位置,第二个人是黑皇后开始在 ...

  9. Codeforces 652F Ants on a Circle

    Ants on a Circle 感觉这个思路好巧妙啊. 我们能发现不管怎么碰撞,初始态和最终态蚂蚁间的相对顺序都是一样的, 并且所占的格子也是一样的, 那么我们就只需要 找到其中一个蚂蚁的最终位置就 ...

随机推荐

  1. SonarQube学习(五)- SonarQube之自定义规则使用

    一.前言 古人云:"欲速则不达",最近真的是深有体会.学习也是如此,不是一件着急的事,越是着急越不会. 就拿SonarQube来说吧,去年年末就想学来着,但是想着想着就搁置了,有时 ...

  2. 【JavaWeb】现代 JavaScript 教程

    js_model_tutorial !!待更新 前言 现代 JavaScript 教程的学习笔记,它是一份不错的学习资源,感谢开源. 中文链接 基础 函数 代码示例 函数的声明方式 function ...

  3. LeetCode232 用栈实现队列

    使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. ...

  4. vim 手动添加脚本头部信息

    vim /root/.vimrc 8,1 全部 set autoindent set tabstop=5 set shiftwidth=4 function AddTitle() call setli ...

  5. oracle释放空间到OS

    测试: 建表空间 CREATE TABLESPACE TESTTBS DATAFILE '/oradata01/dfhdb/testtbs01.dbf' SIZE 2G; 在表空间上建表 CREATE ...

  6. Linux服务器上迁移项目路径,修改nginx配置,迁移及备份MongoDB数据库流程 (超详细)!!!

    缘由:客户服务器项目路径不是很合理,导致Jenkins自动部署时还需要添加路径后再更新部署,所以需要把项目路径统一和规范化. 迁移项目路径,保证路径合规,同时做好备份和迁移.迁移后先安装好依赖. 项目 ...

  7. STM32驱动LCD实战

    前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文章,本文将对STM32驱动LCD进行实战应用.LCD是深圳市拓普微科技开发有限公司的LMT028 ...

  8. response返回特性

    1. response 返回特性 r=requests.get("http://www.baidu.com")print(r.text) #打印返回正文print(r.status ...

  9. 六个你不知道的PR快捷键,拯救你的剪辑效率

    5G时代到来,会剪辑视频的人,无论在校园还是未来步入职场都很吃香.对于普通人来说,视频处理也成为了一个通用技能.PR是我们大多数人剪辑中,经常会用到的剪辑工具,之前的文章中已经给大家总结了pr的一些提 ...

  10. java虚拟机入门(五)- 常见垃圾回收器及jvm实现

    上节讲完了垃圾回收的基础,包括java的垃圾是什么,如何寻找以及常用的垃圾回收算法,那么那么多的理论知识讲完了,具体是什么样的东西在做着回收垃圾的事情呢?我们接下来就好好聊聊jvm中常用的垃圾回收器. ...