果然昨天和别人合照丢的脸今天都加进RP里了

  T3是用了dp快速幂(???),T1,T2考试的时候把想法都写注释了。

  T1:  

#include<cstdio>
using namespace std;
const int maxn=1e6+;
int n;
int f[maxn];
int head[maxn];
int nx[maxn<<];
int to[maxn<<];
int tp[maxn<<],cnt;
inline void add(int a,int b,int c){
nx[++cnt]=head[a];
head[a]=cnt;
to[cnt]=b;
tp[cnt]=c;
}
void init(){
scanf("%d",&n);
for(int i=;i<=n;++i){
int x,y,z; scanf("%d%d%d",&f[i],&x,&y);
z=y?(x?:):;//must not,must,no lim
add(i,f[i],z); add(f[i],i,z);
}
}
int dp[maxn];
bool g[maxn];
void dfs(int x){
bool leaf=;
for(int i=head[x];i;i=nx[i]){
int t=to[i];
if(t!=f[x]) dfs(t),leaf=;
}
if(leaf) return;
int cntt=;
for(int i=head[x];i;i=nx[i]){
int son=to[i];
if(son==f[x]) continue;
dp[x]+=dp[son];
if(tp[i]==||(!tp[i]&&g[son])){
dp[x]-=g[son];
++cntt;
}
}
dp[x]+=(cntt+)>>;
g[x]=cntt&;
}
int main(){
init(); dfs();
printf("%d\n",dp[]);
return ;
}
/*
边只有三种,必须翻,可以翻,不能翻
是否存在需要翻转不能翻转的边的情况
不会,因为还要把它翻回去,不如两边分开翻
所以遇到不能翻,直接截断翻转链。
dp[n]表示仅考虑一棵子树内的最少翻转次数。
g[n]表示子树是否需要一条从根引出的翻转链。
先把儿子的dp都加上
必须翻的边 减去儿子的g,记录下来作贡献
不能翻的边 不管
可以翻的边 如果儿子有g,当成必须翻的边处理,否则不管
运用了一个贪心的想法,如果可以尽量把问题拖到父亲解决,代价不会更高
*/

(我看你是为难我pang)虎

  T2:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=1e3+;
const int mod=1e9+;
int n,m,ans;
bool have_w,have_b;
char ch[maxn];
short map[maxn][maxn];
void init(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i){
scanf("%s",ch+);
for(int j=;j<=m;++j){
if(ch[j]=='W') map[i][j]=,have_w=;
if(ch[j]=='B') map[i][j]=,have_b=;
}
}
}
short tmp[maxn][maxn];
void rotate(){
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
tmp[i][j]=map[i][j];
swap(n,m);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
map[i][j]=tmp[j][n-i+];
}
int dp[][maxn],high[maxn],low[maxn];
void DP(){
for(int i=;i<=m;++i){
high[i]=n;low[i]=;
for(int j=;j<=n;++j){
if(map[j][i]==) low[i]=max(low[i],n-j+);
if(map[j][i]==) high[i]=min(high[i],n-j);
}
}
for(int j=n;j;--j) dp[][j]=; dp[][]=;
for(int i=;i<=m;++i){
bool u=i&;
memset(dp[u],,sizeof(dp[u]));
for(int j=low[i];j<=high[i];++j) dp[u][j]=dp[u^][j];
for(int j=n;~j;--j) (dp[u][j]+=dp[u][j+])%=mod;
}
(ans+=dp[m&][]-dp[m&][n])%=mod;
}
//保证了dp求出的有高度相等,但是没有全选/全不选
//减去高度相等时多算出的贡献,每种都多算了一次
//高于或等于最高的1,低于最低的2时,可以高度相等。
int pos[][];
void uniq(){
pos[][]=pos[][]=n+;
pos[][]=pos[][]=m+;
pos[][]=pos[][]=pos[][]=pos[][]=;
for(int i=;i<=n;++i){
for(int j=;j<=m;++j){
for(int k=;k<=;++k) if(map[i][j]==k){
pos[k][]=min(pos[k][],i);
pos[k][]=max(pos[k][],i);
pos[k][]=min(pos[k][],j);
pos[k][]=max(pos[k][],j);
}
}
}
//have_w&&have_b 包括了0和m
ans-=max(pos[][]-pos[][],);
ans-=max(pos[][]-pos[][],);
ans-=max(pos[][]-pos[][],);
ans-=max(pos[][]-pos[][],);
//减了404m,应为101m
if(!have_w&&!have_b) ans+=;
//减了202m,应为10或1m
if(have_w&&!have_b) ans+=;
if(!have_w&&have_b) ans+=;
ans%=mod;
(ans+=mod)%=mod;
}
int main(){
init(); uniq(); DP();
rotate(); DP();
rotate(); DP();
rotate(); DP();
printf("%d\n",ans);
return ;
}
/*
对于每一行和每一列,要么清一色,要么各占半壁江山,没有夹在中间的情况
所以在整张图上阴阳的分布是各占据一个直角
把阳的直角放在左下角
把区域看成数轴上柱子的高度,则柱子高度单调不增
强制为阳就是最低高度,强制为阴就是最高高度
然后把图旋转90度,dp4次
貌似高度全都相等的情况要特殊考虑
*/

阴阳

  T3:

#include<cstdio>
using namespace std;
int main(){
puts("");
return ;
}

山洞(40分)

  

NOIP模拟 28的更多相关文章

  1. NOIP 模拟 $28\; \rm 遗忘之祭仪$

    题解 \(by\;zj\varphi\) 直接贪心模拟即可,对于每个点,如果它未被覆盖,直接在这覆盖一次. 每个黑点只会被扫一次,所以总复杂度为 \(\mathcal O\rm (nm)\) Code ...

  2. NOIP 模拟 $28\; \rm 割海成路之日$

    题解 \(by\;zj\varphi\) 用两个集合分别表示 \(1\) 边联通块,\(1,2\) 边联通块 . \(\rm son_x\) 表示当前节点通过 \(3\) 类边能到的 \(2\) 联通 ...

  3. NOIP 模拟 $28\; \rm 客星璀璨之夜$

    题解 \(by\;zj\varphi\) 概率与期望,考虑 \(\rm dp\) 设 \(dp_{i,j}\) 为消除 \(i-j\) 这一段行星的期望,转移: 枚举 \(k\) 为当前状态下第一个撞 ...

  4. NOIP模拟 6.28

    NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这 ...

  5. 2017-9-22 NOIP模拟赛[xxy][数论]

    XXY 的 的 NOIP 模拟赛 4 4 —— 数学专场 A Description定义 f(x)表示 x 的约数和,例:f(12)=1+2+3+4+6+12=28给出 x,y,求Σf(i),i∈[x ...

  6. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  7. NOIP模拟17.9.21

    NOIP模拟17.9.21 3 58 145 201 161.5 样例输出21.6 数据规模及约定对于40% 的数据,N <= 20对于60% 的数据,N <= 1000对于100% 的数 ...

  8. NOIP模拟17.9.22

    NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥

  9. NOIP 模拟4 T2

    本题属于二和一问题 子问题相互对称 考虑对于问题一:知a求b 那么根据b数组定义式 显然能发现问题在于如何求dis(最短路) 有很多算法可供选择 dijsktra,floyed,bfs/dfs,spf ...

随机推荐

  1. ELK 学习笔记之 elasticsearch Mget操作

    Mget操作: 查询多个文档: curl -XGET 'http://192.168.1.151:9200/_mget' -d '{"docs": [{"_index&q ...

  2. Nginx开启Gzip压缩提升页面加载速度

    1.在 nginx 的conf 目录下新建 gzip.conf 文件 #开启gzip压缩 gzip on; #设置允许压缩的页面最小字节数 gzip_min_length 1k; #申请4个单位为16 ...

  3. 10个值得深思的_PHP_面试问题

    Q1 第一个问题关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "\"&q ...

  4. 【WPF】EntityframeworkCore NLog出力设置

    最近在用EFcore,由于不熟悉,经常出现一些异常都不知道如何排查,只能把EFcore的执行记录打印出来调查.确实简化了很多问题的调查. 官网提供了Asp.net Core与.net core 应用的 ...

  5. Android实现apk插件方式换肤

    换肤思路: 1.什么时候换肤? xml加载前换肤,如果xml加载后换肤,用户将会看见换肤之前的色彩,用户体验不好. 2.皮肤是什么? 皮肤就是apk,是一个资源包,包含了颜色.图片等. 3.什么样的控 ...

  6. Asp.NetCore源码学习[2-1]:日志

    Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...

  7. Nebula 架构剖析系列(一)图数据库的存储设计

    摘要 在讨论某个数据库时,存储 ( Storage ) 和计算 ( Query Engine ) 通常是讨论的热点,也是爱好者们了解某个数据库不可或缺的部分.每个数据库都有其独有的存储.计算方式,今天 ...

  8. selenium+testNG自动化测试框架搭建

    自动化测试框架搭建 1 Java环境的搭建 1.1访问oracle的官网下载最新版本的jdk http://www.oracle.com/technetwork/java/javase/downloa ...

  9. Spring-Data-Jpa使用总结

    参考资源列表 官方文档:https://docs.spring.io/spring-data/jpa/docs/2.1.5.RELEASE/reference/html/ <Spring Dat ...

  10. Powshell之基础语法

    记录一下关于Powershell的基础语法 变量 变量都是以$开头, 是强类型语言, 语言是大小写不敏感的 提一提变量保护与常量的声明:New-Variable num -Value -Force - ...