Codeforces Round #406 (Div. 2)滚粗记
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)滚粗记的更多相关文章
- Codeforces Round#402(Div.1)掉分记+题解
哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...
- Codeforces #Round 406(Div.2)
来自FallDream的博客,未经允许,请勿转载,谢谢. ------------------------------------------------------- 大家好,我是一个假人.在学习O ...
- Educational Codeforces Round 58 Div. 2 自闭记
明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...
- Codeforces Round #406 (Div. 1) B. Legacy 线段树建图跑最短路
B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...
- Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索
A. Berzerk 题目连接: http://codeforces.com/contest/786/problem/A Description Rick and Morty are playing ...
- 维护前面的position+主席树 Codeforces Round #406 (Div. 2) E
http://codeforces.com/contest/787/problem/E 题目大意:给你n块,每个块都有一个颜色,定义一个k,表示在区间[l,r]中最多有k中不同的颜色.另k=1,2,3 ...
- 区间->点,点->区间,线段树优化建图+dijstra Codeforces Round #406 (Div. 2) D
http://codeforces.com/contest/787/problem/D 题目大意:有n个点,三种有向边,这三种有向边一共加在一起有m个,然后起点是s,问,从s到所有点的最短路是多少? ...
- 有向图博弈+出度的结合 Codeforces Round #406 (Div. 2) C
http://codeforces.com/contest/787/problem/C 题目大意:有一个长度为n的环,第1个位置是黑洞,其他都是星球.已知在星球上(不含第一个黑洞)有一位神.有两个人, ...
- 【转】Codeforces Round #406 (Div. 1) B. Legacy 线段树建图&&最短路
B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...
随机推荐
- 写一个 setter 方法用于完成 @property (nonatomic, retain) NSString *name,
写一个 setter 方法用于完成 @property (nonatomic, retain) NSString *name 写一个 setter 方法用于完成 @property (nonatomi ...
- springAOP之代理模式
springAOP指的是在spring中的AOP,什么是AOP,相对于java中的面向对象(oop),在面向对象中一些公共的行为,像日志记录,权限验证等如果都使用面向对象来做,会在每个业务方法中都写上 ...
- JAVA验证码识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本
JAVA验证识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本 工具准备: jTessBoxEditorFX下载:https://github.com/nguyenq/jT ...
- 获取安卓app的appPackage和appActivity
1.需要配置好android的开发环境后,打开cmd命令窗口 2.在命令窗口中输入,adb logcat>D:/log.log,抓取日志 3.运行启动app 4.查看日志log 5.搜索日志的关 ...
- Java线程Run和Start的区别
先上结论:run只是Thread里面的一个普通方法,start是启动线程的方法.何以见得呢?可以执行下面的代码看看run和start的区别: package com.basic.thread; /** ...
- C#匿名参数(转载too)
匿名方法是在初始化委托时内联声明的方法. 例如下面这两个例子: 不使用匿名方法的委托: using System; using System.Collections.Generic; using Sy ...
- [python] Queue.Queue vs. collections.deque
https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque/717199#717199 Queue,Queu ...
- Spark SQL、DataFrame和Dataset——转载
转载自: Spark SQL.DataFrame和Datase
- pip安装Crypto注意事项
pip install PyCrypto 1.使用pip install Crypto的方式安装的文件夹名称为crypto,而内部引用都用的Crypto路径,因此pip安装后,需要将文件夹名称修改为C ...
- vmvare fusion 8
http://jingyan.baidu.com/article/54b6b9c0f8830f2d583b47ce.html 补充:vmware tools 在上面,直接点击安装