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 = {'}': '{', ']': '[ ...
随机推荐
- 动态合并或定制GridView控件Header头某些列
开发时,有时会对GridView控件头做一些字段合并.多行表头,多列合并,明白了其中的原理,实现起来,均能运用自如.下面Insus.NET分享自己的做法. 创建站点,创建aspx网页,拉GridVie ...
- Oracle PL/SQL编程语法
--plsql块结构,计算a,b的和 declare a ; b ; c int; begin c:=a+b; dbms_output.put_line(c); end; --%type数据类型,输出 ...
- 《OD面试》之多线程高并发
参考: 聊聊并发(三)——JAVA线程池的分析和使用 Java Executor并发框架(三)ThreadPoolExecutor 队列缓存策略 控制并发线程数的Semaphore.Scheduled ...
- 树状数组【bzoj1103】: [POI2007]大都市meg
1103: [POI2007]大都市meg 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡 ...
- luogu3312 [SDOI2014]数表 (莫比乌斯反演+树状数组)
link \(\sum_{i=1}^n\sum_{j=1}^m[s(\gcd(i,j))\le a]s(\gcd(i,j))\) \(=\sum_{p=1}^ns(p)[s(p)\le a]\sum_ ...
- CF352B Jeff and Periods 模拟
One day Jeff got hold of an integer sequence a1, a2, ..., an of length n. The boy immediately decide ...
- shell脚本学习一
shell脚本是一种程序与linux内核的语言: 第一个shell脚本: #!/bin/bash echo "cxy" 就是输出cxy 如何执行这个脚本呢: cd demo 进入s ...
- .net mvc 框架实现后台管理系统 2
layui 数据表格 返回格式: var json = new { code = 0, count = pagers.totalRows, msg = "", data =null ...
- java 常用操作(保留小数位数、int转string,string转int)
1.保留2位小数 //similarityTemp为double类型,需要保留2位有效数据,利用String.format String strTemp=String.format("%.2 ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...