POJ 1068&&2632&&1573&&2993&&2996
这次的题目是著名的模拟(水逼)专题
题目难度都不大,思维也不深,就是一个字——烦
同时很多题目都有很多坑点
1608 题意是告诉你一个只有()的字符串(且匹配正确),每个)的左边有几个(,让你求每一对括号中包含了几对括号。
思路很水,模拟出原字符串再开个栈做一次就行了。
CODE
#include<cstdio>
using namespace std;
const int N=;
int t,n,s[N],stack[N],i,j,x,last,del,top;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline void work(int b,int e)
{
int l=,r=;
for (int i=b;i<=e;++i)
if (!s[i]) l++; else r++;
printf("%d ",l<r?l:r);
}
int main()
{
read(t);
while (t--)
{
read(n); last=; del=;
for (i=;i<=n;++i)
{
read(x);
for (j=last;j<last+x-del;++j)
s[j]=;
s[last+x-del]=; last=last+x-del+; del=x;
}
for (i=;i<=*n;++i)
if (!s[i]) stack[++top]=i; else work(stack[top--],i);
putchar('\n');
}
return ;
}
2632 就是一堆机器人行走让你求它们会不会撞到或者撞墙。模拟整个过程即可(毫无算法可言)
CODE
#include<cstdio>
using namespace std;
const int N=;
struct robot
{
int x,y;
char side;
}r[N];
struct place
{
bool b;
int num;
}f[N][N];
int t,a,b,m,n,i,j,x,num,res;
char ch;
bool flag;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline void turn_left(int num,int step)
{
if (r[num].side=='N') res=;
if (r[num].side=='W') res=;
if (r[num].side=='S') res=;
if (r[num].side=='E') res=;
res=(res+step)%;
if (res==) r[num].side='N';
if (res==) r[num].side='W';
if (res==) r[num].side='S';
if (res==) r[num].side='E';
}
inline void turn_right(int num,int step)
{
if (r[num].side=='N') res=;
if (r[num].side=='E') res=;
if (r[num].side=='S') res=;
if (r[num].side=='W') res=;
res=(res+step)%;
if (res==) r[num].side='N';
if (res==) r[num].side='E';
if (res==) r[num].side='S';
if (res==) r[num].side='W';
}
inline void forward(int num,int step)
{
if (!step) return;
f[r[num].x][r[num].y].b=f[r[num].x][r[num].y].num=;
if (r[num].side=='N')
{
while (step--)
{
if (f[r[num].x][++r[num].y].b) { printf("Robot %d crashes into robot %d\n",num,f[r[num].x][r[num].y].num); flag=; return; }
if (r[num].y>b) { printf("Robot %d crashes into the wall\n",num); flag=; return; }
}
}
if (r[num].side=='E')
{
while (step--)
{
if (f[++r[num].x][r[num].y].b) { printf("Robot %d crashes into robot %d\n",num,f[r[num].x][r[num].y].num); flag=; return; }
if (r[num].x>a) { printf("Robot %d crashes into the wall\n",num); flag=; return; }
}
}
if (r[num].side=='S')
{
while (step--)
{
if (f[r[num].x][--r[num].y].b) { printf("Robot %d crashes into robot %d\n",num,f[r[num].x][r[num].y].num); flag=; return; }
if (!r[num].y) { printf("Robot %d crashes into the wall\n",num); flag=; return; }
}
}
if (r[num].side=='W')
{
while (step--)
{
if (f[--r[num].x][r[num].y].b) { printf("Robot %d crashes into robot %d\n",num,f[r[num].x][r[num].y].num); flag=; return; }
if (!r[num].x) { printf("Robot %d crashes into the wall\n",num); flag=; return; }
}
}
f[r[num].x][r[num].y].b=; f[r[num].x][r[num].y].num=num;
}
int main()
{
read(t);
while (t--)
{
for (i=;i<N;++i)
for (j=;j<N;++j)
f[i][j].b=f[i][j].num=; flag=;
read(a); read(b);
read(n); read(m);
for (i=;i<=n;++i)
read(r[i].x),read(r[i].y),r[i].side=getchar(),f[r[i].x][r[i].y].b=,f[r[i].x][r[i].y].num=i;
while (m--)
{
read(num); ch=getchar(); read(x);
if (flag) continue;
if (ch=='L') turn_left(num,x);
if (ch=='R') turn_right(num,x);
if (ch=='F') forward(num,x);
}
if (!flag) puts("OK");
}
return ;
}
1573 同上,一个机器人在地图上走。让你求要走多久才能走出去或是在循环的圈长。
DFS或模拟都可以,难度也不大
CODE
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
char a[N][N];
int f[N][N],n,m,x,y,i,j;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
int main()
{
for (;;)
{
read(n); read(m); read(y); x=;
if (n+m+y==) break;
memset(f,,sizeof(f));
for (i=;i<=n;++i)
{
for (j=;j<=m;++j)
a[i][j]=getchar();
getchar();
}
f[x][y]=;
for (;;)
{
if (a[x][y]=='N') { if (x==) { printf("%d step(s) to exit\n",f[x][y]); break; } if (!f[x-][y]) f[x-][y]=f[x][y]+,x--; else { printf("%d step(s) before a loop of %d step(s)\n",f[x-][y]-,f[x][y]-f[x-][y]+); break; } }
if (a[x][y]=='E') { if (y==m) { printf("%d step(s) to exit\n",f[x][y]); break; } if (!f[x][y+]) f[x][y+]=f[x][y]+,y++; else { printf("%d step(s) before a loop of %d step(s)\n",f[x][y+]-,f[x][y]-f[x][y+]+); break; } }
if (a[x][y]=='S') { if (x==n) { printf("%d step(s) to exit\n",f[x][y]); break; } if (!f[x+][y]) f[x+][y]=f[x][y]+,x++; else { printf("%d step(s) before a loop of %d step(s)\n",f[x+][y]-,f[x][y]-f[x+][y]+); break; } }
if (a[x][y]=='W') { if (y==) { printf("%d step(s) to exit\n",f[x][y]); break; } if (!f[x][y-]) f[x][y-]=f[x][y]+,y--; else { printf("%d step(s) before a loop of %d step(s)\n",f[x][y-]-,f[x][y]-f[x][y-]+); break; } }
}
}
return ;
}
2993&&2996 两道题刚好相反,是一个模拟棋盘的问题。
但主要是有一些没有任何用处的东西(+,-,|)影响了正常的操作。
注意下细节以及题意,多打几次就A了
2993CODE
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
char a[][]=
{
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
{'|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|',':',':',':','|','.','.','.','|'},
{'+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+','-','-','-','+'},
};
string s1,s2;
inline void white(string s)
{
while (s.size())
{
string temp="";
for (int i=;i<=s.find(",");++i)
temp+=s[i];
if (temp[]>='A'&&temp[]<='Z') a[(-temp[]+''+)*-][(temp[]-'a'+)*-]=temp[],s.erase(,); else a[(-temp[]+''+)*-][(temp[]-'a'+)*-]='P',s.erase(,);
}
}
inline void black(string s)
{
while (s.size())
{
string temp="";
for (int i=;i<=s.find(",");++i)
temp+=s[i];
if (temp[]>='A'&&temp[]<='Z') a[(-temp[]+''+)*-][(temp[]-'a'+)*-]=temp[]-'A'+'a',s.erase(,); else a[(-temp[]+''+)*-][(temp[]-'a'+)*-]='p',s.erase(,);
}
}
int main()
{
cin>>s1; cin>>s2; s2+=',';
if (s1[]=='W') white(s2); else black(s2);
cin>>s1; cin>>s2; s2+=',';
if (s1[]=='W') white(s2); else black(s2);
for (int i=;i<;++i)
{
for (int j=;j<;++j)
putchar(a[i][j]);
putchar('\n');
}
return ;
}
2996CODE
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string a[],s;
int i,j;
int main()
{
cin>>s;
for (i=;i<=;++i)
cin>>a[i],cin>>s;
printf("White: ");
for (i=;i;--i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='K') printf("K%c%d",'a'+(j+)/-,-i+);
for (i=;i;--i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='Q') printf(",Q%c%d",'a'+(j+)/-,-i+);
for (i=;i;--i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='R')
printf(",R%c%d",'a'+(j+)/-,-i+);
for (i=;i;--i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='B')
printf(",B%c%d",'a'+(j+)/-,-i+);
for (i=;i;--i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='N') printf(",N%c%d",'a'+(j+)/-,-i+);
for (i=;i;--i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='P')
printf(",%c%d",'a'+(j+)/-,-i+);
printf("\nBlack: ");
for (i=;i<=;++i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='k') printf("K%c%d",'a'+(j+)/-,-i+);
for (i=;i<=;++i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='q') printf(",Q%c%d",'a'+(j+)/-,-i+);
for (i=;i<=;++i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='r')
printf(",R%c%d",'a'+(j+)/-,-i+);
for (i=;i<=;++i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='b')
printf(",B%c%d",'a'+(j+)/-,-i+);
for (i=;i<=;++i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='n') printf(",N%c%d",'a'+(j+)/-,-i+);
for (i=;i<=;++i)
for (j=;j<a[i].size();++j)
if (a[i][j]=='p')
printf(",%c%d",'a'+(j+)/-,-i+);
return ;
}
最后发现我模拟题的代码都是复制来复制去的,导致程序看起来很。。。(臃肿)
下次还是尽量多清晰的分块吧
POJ 1068&&2632&&1573&&2993&&2996的更多相关文章
- 模拟 POJ 1068 Parencodings
题目地址:http://poj.org/problem?id=1068 /* 题意:给出每个右括号前的左括号总数(P序列),输出每对括号里的(包括自身)右括号总数(W序列) 模拟题:无算法,s数组把左 ...
- poj 1068 模拟
题目链接 大概题意就是告诉你有个n个小括号,每一个")"左边有多少个"("都告诉你了,然后让你求出每一对括号之间有多少对括号(包含自己本身). 思路: 我先计算 ...
- POJ 1068
http://poj.org/problem?id=1068 这道题是一道模拟的题目 题目大意呢,p代表前面的'('的个数,而w代表这个括号所包括的括号的个数: 给你p,要你求w: 解题思路: 首先, ...
- POJ 1068 Parencodings 模拟 难度:0
http://poj.org/problem?id=1068 #include<cstdio> #include <cstring> using namespace std; ...
- poj 1068 Parencodings(栈)
题目链接:http://poj.org/problem?id=1068 思路分析:对栈的模拟,将栈中元素视为广义表,如 (((()()()))),可以看做 LS =< a1, a2..., a1 ...
- POJ 1068 Parencodings【水模拟--数括号】
链接: http://poj.org/problem?id=1068 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#probl ...
- poj 1068 Parencodings(模拟)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj ...
- POJ 1068 AC 2014-01-07 15:24 146人阅读 评论(0) 收藏
POJ的题目都是英文的,所以,,,还是直接贴代码吧 #include<stdio.h> int main(){ int x,y,z; int n,nm,max; scanf("% ...
- POJ 1068 Parencodings (类似括号的处理问题)
Pare ...
随机推荐
- Android ConstraintLayout详解(from jianshu)
Android ConstraintLayout详解 https://www.jianshu.com/p/a8b49ff64cd3 1. 概述 在本篇文章中,你会学习到有关Constraint ...
- 基于docker搭建jumpserver堡垒机
一.环境信息 1.jumpserver 192.168.137.129 CentOS6.4 kernel版本为 3.10.5-3.el6.x86_64 2.客户机 dev01-04 3.docke ...
- qt多线程信号槽传输方式
//简单介绍一下QT信号与槽的连接方式: //Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, //如 ...
- python websocket client 使用
import websocket ws = websocket.WebSocket() ws.connect("xx.xx.xx") ws.send("string&qu ...
- She Left Her Shoes
She left her shoes, she took everything else, her toothbrush, her clothes, and even that stupid litt ...
- ubuntu下配置时间同步NTP
1参考文献: 1.鸟哥的Linux私房菜:第十五章.时间服务器: NTP 服务器(强烈建议看完) 2.http://www.crsay.com/wiki/wiki.php/server/centos/ ...
- js拼接table查询信息部分
其一: $("#datagrid").empty(); var a=0; <order-rows> a++; $("#datagrid").appe ...
- C#-老生常谈的 值类型与引用类型
特殊的String 说起值类型和引用类型,大家都知道这么个事,很多时候我们会拿String做值类型来做比较,但实际上String虽然是值类型,却表现的有点特别 String示例 看下面的一个例子: 话 ...
- Shell 脚本合集
0. 说明 Shell 脚本合集 1. xcall.sh xcall.sh 编写为了为了同时对多台服务器进行操作,编写完成之后,将其发送到 /usr/local/bin 下 #!/bin/bash ...
- MySQL索引原理以及类型
1.什么是索引 索引是在MySQL的存储引擎上,对其表中的某个列或多列通过一些算法实现可快速查询出结果的一种方法. 2.为什么要有索引 就像一本书要有目录一样,我们可快速通过目录来查找对应的章节得出结 ...