这次的题目是著名的模拟(水逼)专题

  题目难度都不大,思维也不深,就是一个字——烦

  同时很多题目都有很多坑点

  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的更多相关文章

  1. 模拟 POJ 1068 Parencodings

    题目地址:http://poj.org/problem?id=1068 /* 题意:给出每个右括号前的左括号总数(P序列),输出每对括号里的(包括自身)右括号总数(W序列) 模拟题:无算法,s数组把左 ...

  2. poj 1068 模拟

    题目链接 大概题意就是告诉你有个n个小括号,每一个")"左边有多少个"("都告诉你了,然后让你求出每一对括号之间有多少对括号(包含自己本身). 思路: 我先计算 ...

  3. POJ 1068

    http://poj.org/problem?id=1068 这道题是一道模拟的题目 题目大意呢,p代表前面的'('的个数,而w代表这个括号所包括的括号的个数: 给你p,要你求w: 解题思路: 首先, ...

  4. POJ 1068 Parencodings 模拟 难度:0

    http://poj.org/problem?id=1068 #include<cstdio> #include <cstring> using namespace std; ...

  5. poj 1068 Parencodings(栈)

    题目链接:http://poj.org/problem?id=1068 思路分析:对栈的模拟,将栈中元素视为广义表,如 (((()()()))),可以看做 LS =< a1, a2..., a1 ...

  6. POJ 1068 Parencodings【水模拟--数括号】

    链接: http://poj.org/problem?id=1068 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#probl ...

  7. poj 1068 Parencodings(模拟)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj ...

  8. 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("% ...

  9. POJ 1068 Parencodings (类似括号的处理问题)

                                                                                                    Pare ...

随机推荐

  1. 【Redis】Redis学习(六) Redis 基本运维

    Redis的单机搭建,主从搭建,Sentinal搭建,以及Redis集群搭建的步骤参照前面的文章.现在来说一下Redis的基本运维,毕竟如果一切正常是最好的,但是当出现问题不能使用的时候,准确定位问题 ...

  2. [WPF 知识总结系列] —— 基本控件的简单样式集合

    一.ScrollBar <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...

  3. mysql client之init-command

    If the server is a replication master and you want to avoid replicating the content to replication s ...

  4. 天河2号-保持使用yhrun/srun时连接不中断 (screen 命令教程 )

    问题重述: 当我们使用天河机进行并行程序实验的时候,都会使用到yhrun/srun命令.在超算环境下,yhrun 命令用来进行提交交互式作业,有屏幕输出.但是容易受到网络波动影响导致断网或者关闭窗口最 ...

  5. Python学习---Python环境变量安装问题0907

    问题背景: 重新安装操作系统后,原来的环境变量丢失[因Python3.5安装目录是E盘,文件还在,只是丢失了环境变量而已,添加即可] 问题解决: 方法一:使用cmd命令添加path环境变量 在cmd下 ...

  6. 乘风破浪:LeetCode真题_037_Sudoku Solver

    乘风破浪:LeetCode真题_037_Sudoku Solver 一.前言 这次我们对于上次的模型做一个扩展并求解. 二.Sudoku Solver 2.1 问题 2.2 分析与解决     这道题 ...

  7. 关于ORA-00257: archiver error. Connect internal only, until freed 错误处理方法

    产生原因:出现ORA-00257错误(空间不足错误),通过查找资料,绝大部分说这是由于归档日志太多,占用了全部的硬盘剩余空间导致的,通过简单删除日志或加大存储空间就能够解决 解决办法:(亲测有效) 1 ...

  8. C语言:值传递,地址传递和引用传递(example:值交换)

    于C语言中值传递.地址传递和引用传递的我个人理解. 通过一个例子:swap(交换两个整型变量的值)来表现! #include <stdio.h> void swap1(int* a,int ...

  9. [TJOI2013]拯救小矮人

    题目 首先有一个很假的贪心 我们定义一个人的需求为\(H-h_i-b_i\),就是这个人需要多少的高度在他下面他才能逃出去 我们趁剩余的高度还够,优先满足需求较高的 显然是错的,可能有一个人身高很高, ...

  10. Android开发之jdk安装及环境变量配置

    然后开始配置环境变量,JAVA_HOME,Path和classpath三部分: (1)在变量名输入框中写入“JAVA_HOME”,在变量值输入框中写入“C:\Program Files\Java\jd ...