• 寒假ACM训练(二)


    放了假的效率明显就低起来,最近也一直在学习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;
    
    
    }


  • 相关阅读:
    GRUB、MBR名词解释
    linux目录结构
    Linux正则表达式
    linux学习日记之鸟哥
    Linux学习日记之磁盘与档案系统
    linux学习日记之目录配制
    linux学习日记之老男孩
    Linux学习笔记之兄弟连
    关于计算机硬件的一些知识
    重装系统后如何删除系统自带的office2003
  • 原文地址:https://www.cnblogs.com/dengyaolong/p/3697231.html
Copyright © 2020-2023  润新知