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. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  2. 安装Vue.js的方法有三种

    1 使用独立的版本 在Vue.js官网上直接下载,在script标签里引用. 2 使用CND方法(不推荐) 3 NMP 方法 在用Vue.js构建大型应用的时候推荐使用NMP安装方法,NMP能很好的和 ...

  3. TPO-17 C1 Find materials for an opera paper

    TPO-17 C1 Find materials for an opera paper production n. 成果:产品:生产:作品 第 1 段 1.Listen to a conversati ...

  4. Teaching Machines to Understand Us 让机器理解我们 之一 引言

    Teaching Machines to Understand Us   By Tom Simonite  MIT Technology Review Vol.118 No.5 2015 让机器理解我 ...

  5. 集合set、map、list

    一.set 无序.可重复 public static void main(String[] args){ Set<String> set=new HashSet<String> ...

  6. underscore.js源码解析(四)

    没看过前几篇的可以猛戳这里: underscore.js源码解析(一) underscore.js源码解析(二) underscore.js源码解析(三) underscore.js源码GitHub地 ...

  7. Thunder-Beta发布中间产物-2017秋-软件工程第十次作业

    Thunder-Beta发布中间产物(WBS&PSP) WBS: 分解方式:按照「爱阅」阅读器的实施过程分解 使用工具:visio 2013 PSP: PSP 实际时间 Planning 计划 ...

  8. 【数位dp】Enigma

    http://codeforces.com/gym/101889 E 与一般数位dp不同,保存的是能否满足条件,而非记录方案数 代码: #include <iostream> #inclu ...

  9. android入门 — Service

    Service完全在后台运行,没有用户界面.使用的时候先创建Service子类,然后在AndroidManifest.xml中进行注册,同时可以通过<intent-filter.../>进 ...

  10. 第11章 认识和学习bash

    认识bash这个shell 硬件.内核和shell 用户操作计算机流程如下: 用户——>用户界面(shell,KDE,application)——>核心(kernel)——>硬件(h ...