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

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

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

  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. 检测到在集成的托管管道模式下不适用的ASP.NET设置

    解决方法是修改web.config如下: <system.webServer> <validation validateIntegratedModeConfiguration=&qu ...

  2. [Swift] Swift笔记

    开始整理Swift笔记了.打算直接用Playground去写,里面自带的Markup语法和Markdown差不多,显示的效果也不差于博客.而且用Xcode看代码也方便.所以这部分内容不再在博客里记录了 ...

  3. [我的阿里云服务器] —— FTP配置

    前言: FTP是我们用来向服务器上传或者下载文件很重要的一个工具,特别是云服务器,无法使用外设传送文件. 所以下面我们就来配置一下FTP,但是FTP的21端口,通常也是黑客进攻的一个目标,所以需要小心 ...

  4. Rarfile解压不了的问题

    最近用python调用rarfile进行解压rar压缩包时,报了如下错误: rarfile.RarCannotExec: Unrar not installed? (rarfile.UNRAR_TOO ...

  5. pt-table-checksum工具MySQL主从复制数据一致性

    所使用的工具是pt-table-checksum 原理是: 在主上执行检查语句去检查 mysql主从复制的一致性,生成 replace 语句,然后通过复制传递到从库,再通过update 更新 mast ...

  6. TiDB数据库 mydumper命令导出数据报错:(mydumper:1908): CRITICAL **: Couldn't acquire global lock, snapshots will not be consistent: Access denied for user 'super'@'%' (using password: YES)

    今天想使用Tidb官方提供的mydumper来备份AWS上的RDS集群中mysql数据库的某个表,发现报错了 [tidb@:xxx /usr/local/tidb-tools]$ -t -F -B x ...

  7. 团队作业——Alpha冲刺2/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:主要学习JAVA语言,以及加入了Android开发内容的学习. 明日任务:安装Android Studio以及通过观看视频和阅读材料的形式 ...

  8. Django商城项目笔记No.18商品部分-数据表创建

    数据库表设计 在电商中对于商品,有两个重要的概念:SPU和SKU SPU = Standard Product Unit (标准产品单位) SPU是商品信息聚合的最小单位,是一组可服用.易检索的标准化 ...

  9. 028、HTML 标签2超链接,框架标签

    内容:超链接,框架标签############################################################## <!-- 超链接 --> <a h ...

  10. mac层和llczi层

    1.何为数据链路层的(DATA LINK LAYER)的MAC子层和LLC子层? MAC子层的主要功能包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差 错控制等.MAC子层的 ...