A 一看到题,不是一道解不定方程的裸题吗,调了好久exgcd。 其实一个for就好了啊

B 一直WA ON TEST 7真是烦,一想会不会是编号太大了,又写了一个map版本,无用。

调了好久好久才发现有几次询问没有读完mmp

C 调了一晚上,又看了数篇题解,终于看懂了QAQ

这是一道博弈论,借助图论/DP帮助完成。

博弈中有3种状态:必胜,必败,不一定

而我们需要将这些状态一直转移以求得结果。

如果A无论怎么移动,使B下一步必胜,则A的现在状态为必败。
如果A可以移动任意一步,使B下一步必败,则A现在的状态为必胜。

没被搜到就不一定。

大致思路就是这样,考虑具体实现。

1.如果从每个状态正着搜,显然不行。只能由终止状态倒着推

2.每个状态记录一下入度,且每次若转移需要判重! 经计算,queue空间为4*n

3.思路要清晰,要清楚我们输出的是什么东西(我昨晚一直思路混乱,多求了很多没用的东西)

4.注意细节,我好粗心好粗心啊

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define rep(i,a,b) for (int i=a; i<=b; i++)
typedef long long ll;
using namespace std;
#define N 7005
int n,k[],s[][N],dp[][N]; //1 win 0 loop -1 lose
int Degree[][N]; //此时先手者
struct Node {
int p,turn;
} q[N<<],u,v; inline void read(int &x) {
x=; char c=getchar(); int f=;
while (c<''||c>'') {if (c=='-') f=-; c=getchar();}
while (c>=''&&c<='') {x=*x+c-''; c=getchar();} x*=f;
}
inline void bfs() {
int f=,r=;
u.p=; u.turn=; q[]=u; dp[][]=-;
u.turn=; q[]=u; dp[][]=-;
rep(i,,n) rep(j,,) Degree[j][i]=k[j]; //此时先手者
while (f!=r) {
u=q[f++]; int now=u.turn;
rep(i,,k[now^]) { //len!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int dot=(u.p-s[now^][i]+n-)%n+; //% !!!!!!!!!!
if (dot==) continue; //can't be realized!!!!!!!!
if (dp[now][u.p]==-) {
if (dp[now^][dot]==) continue;
dp[now^][dot]=;
v.turn=u.turn^; v.p=dot;
q[r++]=v;
}
else if (dp[now][u.p]==) {
// if (dp[now^1][dot]==1) continue; if win,can't lose!!
if ((--Degree[now^][dot])==) {
dp[now^][dot]=-;
v.turn=u.turn^; v.p=dot;
q[r++]=v;
}
}
}
}
}
int main() {
// freopen("1.in","r",stdin);
read(n);
rep(i,,) {read(k[i]); rep(j,,k[i]) read(s[i][j]);}
bfs();
rep(i,,) {
rep(j,,n)
if (dp[i][j]==) printf("Win ");
else if (dp[i][j]==-) printf("Lose ");
else printf("Loop ");
puts("");
}
return ;
}

D 线段树/虚拟点优化建图

直接建图不可能,这种区间题肯定是裸的线段树

建两棵线段树,每个节点代表一个区间,对于2、3操作,最多连log条边。

第1棵:上到下连边 ;第2棵:下到上连边

操作2:点到tree1的node连边

操作3:tree2的node到点连边

这个转化挺巧妙的。。

自己果然还是菜

Codeforces Round #406 (Div. 2)滚粗记的更多相关文章

  1. Codeforces Round#402(Div.1)掉分记+题解

    哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...

  2. Codeforces #Round 406(Div.2)

    来自FallDream的博客,未经允许,请勿转载,谢谢. ------------------------------------------------------- 大家好,我是一个假人.在学习O ...

  3. Educational Codeforces Round 58 Div. 2 自闭记

    明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...

  4. Codeforces Round #406 (Div. 1) B. Legacy 线段树建图跑最短路

    B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...

  5. Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索

    A. Berzerk 题目连接: http://codeforces.com/contest/786/problem/A Description Rick and Morty are playing ...

  6. 维护前面的position+主席树 Codeforces Round #406 (Div. 2) E

    http://codeforces.com/contest/787/problem/E 题目大意:给你n块,每个块都有一个颜色,定义一个k,表示在区间[l,r]中最多有k中不同的颜色.另k=1,2,3 ...

  7. 区间->点,点->区间,线段树优化建图+dijstra Codeforces Round #406 (Div. 2) D

    http://codeforces.com/contest/787/problem/D 题目大意:有n个点,三种有向边,这三种有向边一共加在一起有m个,然后起点是s,问,从s到所有点的最短路是多少? ...

  8. 有向图博弈+出度的结合 Codeforces Round #406 (Div. 2) C

    http://codeforces.com/contest/787/problem/C 题目大意:有一个长度为n的环,第1个位置是黑洞,其他都是星球.已知在星球上(不含第一个黑洞)有一位神.有两个人, ...

  9. 【转】Codeforces Round #406 (Div. 1) B. Legacy 线段树建图&&最短路

    B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...

随机推荐

  1. flume 安装过程记录

    1.安装jdk 2.下载安装包 : apache-flume-1.7.0-bin.tar.gz 安装包是在win下载的,需要拖动到ubuntu下的/home/hadoop (拖动不了需要先安装  lr ...

  2. IIS解决上传文件大小限制

    目的:通过配置文件和IIS来解决服务器对上传文件大小的限制 1:修改配置文件(默认为4M 值的大小根据自己情况进行修改) <httpRuntime  maxRequestLength=" ...

  3. Firefox开发

    官方文档 First extension 目录结构 ➜ firefox tree . └── borderify └── manifest.json // 必须 directory, files ma ...

  4. Python之requests的安装

    在 windows 系统下,只需要输入命令 pip install requests ,即可安装. 在 linux 系统下,只需要输入命令 sudo pip install requests ,即可安 ...

  5. python爬取淘宝华为手机

    import re from selenium import webdriver from selenium.common.exceptions import TimeoutException fro ...

  6. Dubbo使用心得2

  7. Jenkins 自动化测试

    学习 Jenkins 自动化测试的系列文章 Robot Framework 概念 Robot Framework 安装 Pycharm + Robot Framework 环境搭建 Robot Fra ...

  8. Python爬虫入门(3-4):Urllib库的高级用法

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CS ...

  9. python3【基础】-list&tuple

    一.list概述 list (列表)是python中最常用的数据类型之一,通过列表可以对数据实现最方便的存储,修改等操作.在python3中,list支持如下方法: Help on class lis ...

  10. CentOS 6.7下创建桌面快捷方式

    CentOS 6.7下创建桌面快捷方式如下: 1 在桌面右键,选择“创建启动器" 2 在弹出菜单中,填写名称(显示在桌面上的名字),命令(可执行程序的路径) 3 点击弹出菜单左边的图标,选择 ...