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 = {'}': '{', ']': '[ ...
随机推荐
- [hdu 2604] Queuing 递推 矩阵快速幂
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- 设置django在linux后台运行&查看端口使用
1.后台运行(&),允许所有用户(0.0.0.0)访问,端口为8888 nohup python manage.py runserver 0.0.0.0 8888 & 2.由端口号88 ...
- shared_ptr 和auto_ptr智能指针
shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时 ...
- kuangbin专题十二 HDU1078 FatMouse and Cheese )(dp + dfs 记忆化搜索)
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 我的web安全工程师学习之路——规划篇
据网上收集的web安全工程师需要掌握哪些技能,职位要求以及如何入门,加上学习网易推出的web安全工程师微专业课程,为了进一步学习,所以给自己做了一些小小规划,也希望给同样想成为web安全工程师的同仁们 ...
- Ubuntu系统中连接TFS的Git地址注意事项
在Ubuntu中安装Git后,配置远程Git服务器地址,如果是TFS的Git仓库地址,则需要使用IP地址,否则可能出现识别不出来的问题; 再者,如果你想要在Ubuntu的浏览中访问TFS的Git仓库U ...
- 网络流EdmondsKarp算法模板理解
先推荐一个讲网络流的博客,我的网络流知识均吸收于此 传送门 EdmondsKarp算法基本思想:从起点到终点进行bfs,只要存在路,说明存在增广路径,则取这部分路 权值最小的一部分,即为增广路径( ...
- poj 1664放苹果(递归)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37377 Accepted: 23016 Description ...
- python 编程基础-字典类型和方法(课后习题)
#创建一个字典 dic = {'k1':'v1','k2':'v2','k3':'v3'} #1.请循环遍历出所有的KEY for k in dic: print(k) #2请循环遍历出所有的valu ...
- Linux 网络配置及常用服务配置(Redhat 6)
一.网络配置 1. VMWare 提供了三种网络工作模式供用户选择,他们分别是, ①Bridged(桥接模式): 如果网络中能提供多个IP地址,则使用桥接方式 ②NAT(网络地址转换模式): 如果网络 ...