放了假的效率明显就低起来,最近也一直在学习Ubuntu,所以一直等到今天才写。

还是在用PC.

真的十分郁闷这个LC-Display,其实从思路上是有很多。不过我最后把他当成8字,分成了七笔。

一直WA,一开始是以为那n=0时候出问题。其实我觉得我把问题弄复杂了。还用了栈(因为懒惰,不想花多心机去琢磨用char 数组去读取。)

思路就是:一个巨大的数组,一个ind指明所加载的数字开始列,之后暴力枚举。

#include<iostream>
#include<stack>
using namespace std;
char t[150][1000]; void set(int ind,int n,int s){ int i; switch(n){
case 1: for( i=0;i<s;i++)
t[0][i+ind+1]='-';
break;
case 4:
for( i=0;i<s;i++)
t[s+1][i+ind+1]='-'; break;
case 7:
for( i=0;i<s;i++)
t[2*s+2][i+ind+1]='-';
break;
case 2:
for( i=0;i<s;i++)
t[i+1][ind]='|';
break;
case 3:
for( i=0;i<s;i++){
t[i+1][ind+s+1]='|';
}
break;
case 5:
for( i=0;i<s;i++)
t[s+2+i][ind]='|';
break;
case 6:
for( i=0;i<s;i++)
t[s+2+i][ind+s+1]='|';
break;
case 8:
for(i=0;i<2*s+3;i++)
t[i][ind]=' ';
break; } } void fun(int n,int s){
stack<int> tmp; do{ tmp.push(n%10);
n/=10; }while(n); int siz=tmp.size();
int ind=0;
while(!tmp.empty()){
if(ind!=0){
set(ind,8,s);
ind++; }
int nq=tmp.top();
tmp.pop();
for(int vv=0;vv<2*s+3;vv++)
for(int uu=0;uu<s+2;uu++)
t[vv][uu+ind]=' ';
int l=ind;
int z=l; switch(nq){ case 0:
set(ind,1,s);
set(ind,2,s);
set(ind,3,s);
set(ind,5,s);
set(ind,6,s);
set(ind,7,s);
break;
case 1: set(ind,3,s); set(ind,6,s); break;
case 2:
set(ind,1,s);
//set(ind,2,s);
set(ind,3,s);
set(ind,4,s);
set(ind,5,s);
// set(ind,6,s);
set(ind,7,s);
break;
case 3:
set(ind,1,s);
// set(ind,2,s);
set(ind,3,s);
set(ind,4,s);
// set(ind,5,s);
set(ind,6,s);
set(ind,7,s);
break;
case 4:
// set(ind,1,s);
set(ind,2,s);
set(ind,3,s);
set(ind,4,s);
// set(ind,5,s);
set(ind,6,s);
// set(ind,7,s);
break;
case 5:
set(ind,1,s);
set(ind,2,s);
//set(ind,3,s);
set(ind,4,s);
//set(ind,5,s);
set(ind,6,s);
set(ind,7,s);
break;
case 6:
set(ind,1,s);
set(ind,2,s); set(ind,4,s);
set(ind,5,s);
set(ind,6,s);
set(ind,7,s);
break; case 7:
set(ind,1,s); set(ind,3,s); set(ind,6,s); break;
case 8:
set(ind,1,s);
set(ind,2,s);
set(ind,3,s);
set(ind,4,s);
set(ind,5,s);
set(ind,6,s);
set(ind,7,s);
break;
case 9:
set(ind,1,s);
set(ind,2,s);
set(ind,3,s);
set(ind,4,s);
set(ind,6,s);
set(ind,7,s);
break; }
ind=ind+s+2; }
for(int v=0;v<2*s+3;v++){
for(int u=0;u<siz*(s+2)+siz-1;u++){
if(t[v][u]=='|'||t[v][u]=='-')
cout<<t[v][u];
else cout<<" ";
}
cout<<endl; } } int main(){
int s;
int n;
while(cin>>s>>n&&(s||n)){ fun(n,s);
cout<<endl; }
return 0; }

对于PC110105,本人提交了4次,WA3次,第一次是因为泛洪时候递归没有先赋值,第二次是因为在画矩形时候没有比较大小,第三次试因为我把‘O’看成了’0‘,让我纠结了好长一段时间,真心累。本题加上哨兵,应该还是很和谐的。

#include<iostream>
using namespace std;
char pc[260][260];
void fun(int m,int n,int x,int y,char c,char d){ if(x<=0||y<=0||x>m||y>n)
return;
if(pc[x][y]==d||pc[x][y]!=c)
return; pc[x][y]=d; fun(m,n,x,y+1,c,d);
fun(m,n,x,y-1,c,d);
fun(m,n,x+1,y,c,d);
fun(m,n,x-1,y,c,d); }
int main(){
int m,n;
char Ord;
char name[500000]={0};
while(cin>>Ord){
if(Ord=='X')
break;
else if(Ord=='I'){
cin>>n>>m;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
pc[i][j]='O'; }else if(Ord=='C'){
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
pc[i][j]='O'; }else if(Ord=='L'){
int x,y;char CC;
cin>>y>>x;
cin>>CC;
pc[x][y]=CC; }else if(Ord=='V'){
int x,y,y1;char CC;
int tmp;
cin>>x>>y>>y1;
cin>>CC;
if(y>y1){ tmp=y;
y=y1;
y1=tmp; }
for(tmp=y;tmp<=y1;tmp++)
pc[tmp][x]=CC; }else if(Ord=='H'){ int x,x1,y;char CC;
int tmp;
cin>>x>>x1>>y;
cin>>CC;
if(x>x1){ tmp=x;
x=x1;
x1=tmp; }
for(tmp=x;tmp<=x1;tmp++)
pc[y][tmp]=CC; }else if(Ord=='K'){
int x1,y1,x2,y2;
char CC;
cin>>y1>>x1>>y2>>x2;
cin>>CC;
int tmp;
if(x1>x2){ tmp=x1;
x1=x2;
x2=tmp; }
if(y1>y2){ tmp=y1;
y1=y2;
y2=tmp; }
for(int i=x1;i<=x2;i++)
for(int j=y1;j<=y2;j++)
pc[i][j]=CC; }else if(Ord=='F'){
int x,y;
char CC;
cin>>y>>x;
cin>>CC;
fun(m,n,x,y,pc[x][y],CC); }else if(Ord=='S'){
cin>>name;
cout<<name<<endl;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
cout<<pc[i][j]; cout<<endl;
} } } return 0; }

对于PC110106,这题目实在让人费解,关键就在与输入输出流上,忽略空行。

#include <iostream>
#include <cstdlib>
#include <cstring> using namespace std;
int reg[15],ram[1010];
int fun(int &ind){ int step=0;
int n=ram[ind];
//abc
int c=n%10;
n/=10;
int b=n%10;
n/=10;
int a=n;
// cout<<a<<b<<c;
//abc if(a==1&&b==0&&c==0){
ind++;
return -1;
}else if(a==2){
reg[b]=c; }else if(a==3){
reg[b]+=c; }else if(a==4){ reg[b]*=c; }else if(a==5){ reg[b]=reg[c]; }else if(a==6){
reg[b]+=reg[c]; }else if(a==7){
reg[b]*=reg[c]; }else if(a==8){
reg[b]=ram[reg[c]]; }else if(a==9){
ram[reg[c]]=reg[b]; }else if(a==0){
if(reg[c]!=0){
ind=reg[b];
return 1;
} }
reg[b]%=1000;
step++;
ind++;
return step; } int main(int argc, char *argv[]) { string line;
int n;
cin>>n;
cin.ignore();
getline(cin, line); while(n--){
memset(reg,0,sizeof(reg));
memset(ram,0,sizeof(ram));
for (int i = 0; getline(cin, line) && line.length(); i++)
ram[i] = atoi(line.data());
int ind=0;
int step=0;
while(true){
int tmp=fun(ind);
if(tmp==-1){ step++; break;
}
step+=tmp; }
cout<<step<<endl;
if(n)
cout<<endl; } return 0; }

寒假ACM训练(二)的更多相关文章

  1. 2014暑假ACM训练总结

    2014暑假ACM训练总结报告 匆匆之中,一个暑假又过去了,在学校训练的这段日子真的是感觉日子过得好快啊! 时光如箭,日月如梭! 匆忙的学习之中一个暑假就这样结束了,现在就来写一些总结吧,供自己以后阅 ...

  2. 计蒜客 ACM训练联盟周赛 第一场 Christina式方格取数 思维

    助手Christina发明了一种方格取数的新玩法:在n*m的方格棋盘里,每个格子里写一个数.两个人轮流给格子染色,直到所有格子都染了色.在所有格子染色完后,计算双方的分数.对于任意两个相邻(即有公共边 ...

  3. 2015寒假ACM训练计划

    1月26号至3月4号 每天给自己一个计划.做有意义的事情,不要浪费时间. 8:00——11:30 acm训练 11:30——13:00 午休 13:00——17:30  acm训练 17:30——18 ...

  4. 寒假的ACM训练(一)

    今天开始ACM训练,选择了刘汝佳的<挑战编程>,暂时算是开始了. 测评的网址: http://www.programming-challenges.com 第一个题目是水题啦.3n+1. ...

  5. 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)

    ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...

  6. 计蒜客 ACM训练联盟周赛 第一场 从零开始的神棍之路 暴力dfs

    题目描述 ggwdwsbs最近被Zeratul和Kyurem拉入了日本麻将的坑.现在,ggwdwsbs有13张牌,Kyurem又打了一张,加起来有14张牌.ggwdwsbs想拜托你帮他判断一下,这14 ...

  7. 计蒜客 ACM训练联盟周赛 第一场 Alice和Bob的Nim游戏 矩阵快速幂

    题目描述 众所周知,Alice和Bob非常喜欢博弈,而且Alice永远是先手,Bob永远是后手. Alice和Bob面前有3堆石子,Alice和Bob每次轮流拿某堆石子中的若干个石子(不可以是0个), ...

  8. FJUT2017寒假训练二题解

    A题 题意:让你找出唯一的一个四位数,满足对话时的要求. 思路:因为是4位数,可以直接从1000-9999遍历一遍,判断是否有唯一的数能满足所有条件,如果不是唯一的或者没有满足条件的数就输出Not s ...

  9. 回文数二(acm训练)

    问题 1161: [回文数(二)] 时间限制: 1Sec 内存限制: 128MB 提交: 133 解决: 51 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数.  ...

随机推荐

  1. ATL ActiveX 非管理员权限发布(支持vs2005)

    在win7系统中,vs2005开发的atl activex需要管理员权限才能注册. 解决方法: PerUserRegistration.h #pragma once class PerUserRegi ...

  2. 资深系统管理员给Linux/Unix新人们的建议

    根据同事多年跟踪的学员情况,我们发现,学员在同等条件学习Linux后,选择开发要比系统应用薪水要上升的更为迅速,而且更容易突破5000.8000或10000等每月的门槛:但是这个方向难度会更大,同时会 ...

  3. Android JNI 由C/C++本地代码向Java层传递数据

    最近做的Android项目需要调用C代码,进行串口通信及与硬件设备通信,因此要用到JNI,其中本地代码需要向Java层返回三个参数,分别为 参数一:int型: 参数二: 通信指令,本地代码中为unsi ...

  4. Hadoop-Map/Reduce之单表连接的实现

    MapReduce程序就是根据其特性对数据进行一个简单的逻辑处理,其中最为重要的一个特性就是根据key值将value值进行合并,其次就是在shuffle阶段有排序. 遇到一个MR程序就是要巧妙利用合并 ...

  5. C++ 把输出结果写入文件/从文件中读取数据

    先包含头文文件 #include<fstream> 输出到文件 ofstream fout;  //声明一个输出流对象 fout.open("output.txt"); ...

  6. Maven source jar get

    Maven作为项目管理的包,同时也能方便的将source-jar下载的本地,省去了每次到网上分别下载的问题. Maven下载Jar包同时下载源文件和文档 示例,在maven生成的工程里面:mvn ec ...

  7. ueditor编辑器图片自定义存放目录及路径修改

    百度编辑器ueditor功能强大,很多人士以应用项目开发中,但是里面有一个公众的问题就是上传图片存放目录太深,默认是ueditor/php/upload下,前不久测试后图片存放目录可以改变,但是路径会 ...

  8. VS扩展CodeMaid代码整理插件

    本文章转载:http://www.cnblogs.com/wintersun/p/3577039.html 官方地址:http://www.codemaid.net/ 开源VS扩展CodeMaid介绍 ...

  9. SSH服务

    基于Linux的服务器有多个网卡,其中一个网卡连接了网线,通过该网线链接了个人PC.PC上启动Vmware虚拟机,启动ubuntu系统.然后设置PC的网络为自动获取IP,在PC的Linux的Ubunt ...

  10. SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

    http://blog.csdn.net/weiwenhp/article/details/8094739 目录(?)[-] SQL Server权限管理 login 与user的区别 角色role ...