NOIP模拟 28
果然昨天和别人合照丢的脸今天都加进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的更多相关文章
- NOIP 模拟 $28\; \rm 遗忘之祭仪$
题解 \(by\;zj\varphi\) 直接贪心模拟即可,对于每个点,如果它未被覆盖,直接在这覆盖一次. 每个黑点只会被扫一次,所以总复杂度为 \(\mathcal O\rm (nm)\) Code ...
- NOIP 模拟 $28\; \rm 割海成路之日$
题解 \(by\;zj\varphi\) 用两个集合分别表示 \(1\) 边联通块,\(1,2\) 边联通块 . \(\rm son_x\) 表示当前节点通过 \(3\) 类边能到的 \(2\) 联通 ...
- NOIP 模拟 $28\; \rm 客星璀璨之夜$
题解 \(by\;zj\varphi\) 概率与期望,考虑 \(\rm dp\) 设 \(dp_{i,j}\) 为消除 \(i-j\) 这一段行星的期望,转移: 枚举 \(k\) 为当前状态下第一个撞 ...
- NOIP模拟 6.28
NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这 ...
- 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 ...
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- NOIP模拟17.9.21
NOIP模拟17.9.21 3 58 145 201 161.5 样例输出21.6 数据规模及约定对于40% 的数据,N <= 20对于60% 的数据,N <= 1000对于100% 的数 ...
- NOIP模拟17.9.22
NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥
- NOIP 模拟4 T2
本题属于二和一问题 子问题相互对称 考虑对于问题一:知a求b 那么根据b数组定义式 显然能发现问题在于如何求dis(最短路) 有很多算法可供选择 dijsktra,floyed,bfs/dfs,spf ...
随机推荐
- B/S 工业互联网 地铁行业
前言 近几年,互联网与交通运输的融合,改变了交易模式,影响着运输组织和经营方式,改变了运输主体的市场结构.模糊了运营与非营运的界限,也更好的实现了交通资源的集约共享,同时使得更多依靠外力和企业推动交通 ...
- java IO、NIO、AIO详解
概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调 ...
- Kubernetes中的PV和PVC是啥
K8S引入了一组叫作Persistent Volume Claim(PVC)和Persistent Volume(PV)的API对象,大大降低了用户声明和使用持久化Volume的门槛. 在Pod的Vo ...
- kettle 利用 HTTP Client 获取猫眼电影API近期上映相关信息,并解析json
前言 Kettle 除了常规的数据处理之外,还可以模拟发送HTTP client/post ,REST client. 实验背景 这周二老师布置了一项实验: 建立一个转换,实现一个猫眼API热映电影的 ...
- Thymeleaf模板引擎的使用
Thymeleaf模板引擎的使用 1.模板引擎 JSP.Velocity.Freemarker.Thymeleaf 2.springboot推荐使用Thymeleaf模板引擎 特点:语法更简单,功能更 ...
- 安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等
本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...
- 【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用
前言 本人是一家互联网公司的java开发,由于公司初期公司未招运维人员,恰好我对linux比较熟悉,便在公司服务器搭建了一套Jenkins.Gitlab.Maven私服.Docker私服.Sonarq ...
- Python3程序设计指南:02 数据类型
目录 1.标识符与关键字 1.1 规则 1.2 约定 2.Integral类型 2.1 整数 2.1.1 数值型操作符与函数 2.1.2 使用数据类型创建对象 2.1.3 整数位逻辑操作符 2.2 布 ...
- 第3章(3) do{}while(0)语句
do {} while (0) 主要在宏定义后为语句中使用,比如: #define macrofun(a, b, c) \ do { \ if (a == 5) \ do_this(b, c); \ ...
- AngelSword(天使之剑)漏洞框架的使用
安装setuptools wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setupt ...