Day6上 括号匹配专项
滑稽的题
T1
#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
int n;
int a,b,x;
int main()
{
// freopen("book.in","r",stdin);
// freopen("bok.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
if(x==)
{
a++;
continue;
}
if(x==)
{
if(a)
{
a--;
b++;
continue;
}else
{
printf("No\n");
return ;
}
}
if(x==)
{
if(a&&b)
{
a--;
b--;
continue;
}
if(a>=&&(!b))
{
a-=;
continue;
}
printf("No\n");
return ;
}
}
printf("YES\n");
return ;
}
50
奇怪我手动测得都对,而且超时也不太可能吧。? 待解决。
模拟白
T2
#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
const int N=1e6+;
int n,m;
int sum[N],a[N];
bool is[N];
int main()//又来模拟?
{
freopen("program.in","r",stdin);
freopen("program.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=,x;i<=m;i++)
{
scanf("%d",&x);
is[x]=;
}
for(int i=;i<=n;i++)
{
if(is[i]) sum[a[i]]--;
else
sum[a[i]]++;
if(sum[a[i]]<)
{
printf("NO\n");
return ;
}
}
for(int i=;i<=n;i++)
{
if(sum[i]<||(sum[i]%))
{
printf("NO\n");
return ;
}
sum[i]/=;
}
for(int i=n;i>=;i--)
if(!is[i])//要不是掉下这一步我就可能A了。
{
if(sum[a[i]])
{
is[i]=;
sum[a[i]]--;
}
}
for(int i=;i<=n;i++)
{
if(is[i])
printf("-%d ",a[i]);
else
printf("+%d ",a[i]);
}
return ;
}
括号翻转,站。
区间dp。
但我觉得,模拟就ok。
T3
#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<ctime>
using namespace std;
const int N=;
int h[N],nex[N*],to[N*],w[N*],cnt;
int n,m,q;
int x,y,z;
void add()
{
scanf("%d%d%d",&x,&y,&z);
to[++cnt]=y,nex[cnt]=h[x],h[x]=cnt,w[cnt]=z;
to[++cnt]=x,nex[cnt]=h[y],h[y]=cnt,w[cnt]=z;
}
int kid[N][];
bool vis[N];
int A,B,flag;
void dfs(int x)
{
if(x==B)
{
bool is=;
for(int i=;i<=;i++)
{
if(kid[i][]&&(!kid[i][]))
is=;
if(kid[i][]&&(!kid[i][]))
is=;
if(abs(kid[i][]-kid[i][])%)
is=;
}
if(is) flag=;
return ;
}
for(int i=h[x],v;i;i=nex[i])
if(!vis[to[i]])
{
vis[to[i]]=;
if(w[i]>)
kid[w[i]][]++;
else kid[-w[i]][]++;
dfs(to[i]);
vis[to[i]]=;
if(w[i]>)
kid[w[i]][]--;
else kid[-w[i]][]--;
}
}
int main()
{
freopen("maze.in","r",stdin);
freopen("maze.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
add();
scanf("%d",&q);
for(int i=;i<=q;i++)
{
scanf("%d%d",&A,&B);
flag=;
vis[A]=;
dfs(A);
if(flag) printf("YES\n");
else printf("NO\n");
}
return ;
}
first 25
预处理Floyed dp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
int n,m;
int g[][][],q[**][],t,x,y,z;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(!z)
{
if(z<) z=-z;
else z+=;
g[x][y][z]=g[y][x][z]=;
}else
{
g[x][y][z]=g[y][x][z]=;
t++;q[t][]=x,q[t][]=y,q[t][]=;
t++;q[t][]=y,q[t][]=x,q[t][]=;
}
}
for(int i=;i<=n;i++)
{
t++;
q[t][]=i;
q[t][]=i;
q[t][]=;
}
for(int s=;s<=t;s++)
{
int x=q[s][];
int y=q[s][];
int kid=q[s][];
if(!kid)
for(int i=;i<=n;i++)
if(g[i][x][kid-]==&&g[i][y]==)
{
g[i][y][]=;
t++;
q[t][]=i;
q[t][]=y;
q[t][]=;
}
else
for(int i=;i<=;i++)
{
if(g[i][x]&&(!g[i][y]))
{
g[i][y]=;
t++;
q[t][]=i;
q[t][]=y;
q[t][]=;
}
if(g[y][i]&&(!g[x][i]))
{
g[x][i]=;
t++;
q[t][]=x;
q[t][]=i;
q[t][]=;
}
for(int j=;j<=;j++)
if(g[y][i][j]&&(!g[x][i][j+]))
{
g[x][i][j+]=;
t++;
q[t][]=x;
q[t][]=i;
q[t][]=j+;
}
}
}
int q;
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&x,&y);
if(g[x][y][])
printf("YES\n");
else printf("NO\n"); }
return ;
}
dp
Day6上 括号匹配专项的更多相关文章
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
- 【栈思想、DP】NYOJ-15 括号匹配(二)
括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...
- NYOJ 题目15 括号匹配(二)(区间DP)
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
- POJ 2955 括号匹配,区间DP
题意:给你一些括号,问匹配规则成立的括号的个数. 思路:这题lrj的黑书上有,不过他求的是添加最少的括号数,是的这些括号的匹配全部成立. 我想了下,其实这两个问题是一样的,我们可以先求出括号要匹配的最 ...
- poj 2955 Brackets (区间dp 括号匹配)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- NYOJ15|括号匹配(二)|区间DP|Elena
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[&qu ...
- Dev-cpp怎样去掉括号匹配?
很多编C/C++的同学在用Dev-cpp的时候,就感觉到括号匹配很烦,又不知道哪里去掉. 所以,让ljn告诉你怎样去掉括号匹配. 1.打开Dev-cpp. 2.在菜单栏上,点击“工具[T]”,选择“编 ...
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- python实现括号匹配
1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[ ...
随机推荐
- Python3 中类的反射
1.针对类中方法的反射 # 反射的使用 class Dog(object): def __init__(self,name): self.name = name def eat(self): prin ...
- Vim编辑器的学习
在老师的带领下,最近也算是涨了见识.自己安装并尝试着体验了Vim的一些基本功能,可能是作为初学者,总感觉其指令太过复杂,就文本编辑而言,给我的最大感受就是神而乎之,一头雾水.目前我对这款编译器的掌握水 ...
- Go语言在线培训哪里好?Git操作和代码管理
在实际的项目开发过程中,多人进行项目开发,需要涉及到代码管理和协同管理.这就需要使用到代码协同管理工具.在过去,大家都熟悉使用的是SVN软件,而现在Git代码仓库管理软件的使用更为广泛.在本系列实战项 ...
- C# 添加,修改,删除Xml节点
//添加xml节点 private void AddXml(string image, string title) { XmlDocument xmlDoc = new X ...
- MobaXterm替换cmder
Windows上命令行工具cmder确实很好用,其扩展功能呢,比系统自带强大几倍.后来在使用MobaXterm,官网https://mobaxterm.mobatek.net/免费版本功能足够强大,支 ...
- 平衡树学习笔记(3)-------Splay
Splay 上一篇:平衡树学习笔记(2)-------Treap Splay是一个实用而且灵活性很强的平衡树 效率上也比较客观,但是一定要一次性写对 debug可能不是那么容易 Splay作为平衡树, ...
- SpriteBuilder 不能 Portrait
最近用最新的SpriteBuilder V1.3.6和Xcode 6.0.1,发现一个bug.就是在使用Xcode6的时候的SpriteBuilder已经在Project settings 里面设置了 ...
- kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...
- vue.js路由学习笔记
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- P3172 [CQOI2015]选数(莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...