• bnuoj 29373 Key Logger(模拟双向队列)


    http://www.bnuoj.com/bnuoj/problem_show.php?pid=29373

    【题意】:模拟光标输入

    【题解】:用双向列表模拟实现,这里用其他模拟会超时,注意内存的释放

    【code】:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <math.h>
     4 #include <algorithm>
     5 #include <list>
     6 #include <string>
     7 #include <string.h>
     8 
     9 using namespace std;
    10 
    11 struct Nod
    12 {
    13     char ch;
    14     Nod * second;
    15     Nod * first;
    16     Nod()
    17     {
    18         second=NULL;
    19         first=NULL;
    20         ch=0;
    21     }
    22 };
    23 Nod * head,*tail,*now,*temp;
    24 
    25 char str[1000010];
    26 
    27 int main()
    28 {
    29     int t,cas=1;
    30     scanf("%d",&t);
    31     while(t--)
    32     {
    33         int i;
    34         scanf("%s",str);
    35         int len = strlen(str);
    36         head = new Nod;
    37         tail = new Nod;
    38         head->second = tail;
    39         tail->first = head;
    40         now = head;
    41         int pos = 0;
    42         for(i=0;i<len;i++)
    43         {
    44             char ch = str[i];
    45             if(ch=='<')
    46             {
    47                 if(now!=head)
    48                 {
    49                     now = now->first;
    50                   //  cout<<" sdfsd"<<endl;
    51                 }
    52             }
    53             else if(ch=='>')
    54             {
    55                 if(now->second!=tail)
    56                 {
    57                     now = now->second;
    58                 }
    59             }
    60             else if(ch=='-')
    61             {
    62                 if(now!=head)
    63                 {
    64                     now->first->second = now->second;
    65                     now->second->first = now->first;
    66                     temp = now;
    67                     free(temp);
    68                     now = now->first;
    69                 }
    70             }
    71             else
    72             {
    73                 temp = new Nod;
    74                 temp->ch = ch;
    75                 now->second->first = temp;
    76                 temp->second =now->second;
    77                 now->second = temp;
    78                 temp->first = now;
    79                 now = now->second;
    80             }
    81         }
    82         now = head->second;
    83         printf("Case %d: ",cas++);
    84         while(now!=tail)
    85         {
    86             printf("%c",now->ch);
    87             now = now->second;
    88             free(now->first);
    89         }
    90         free(now);
    91         putchar(10);
    92     }
    93     return 0;
    94 }
  • 相关阅读:
    mysql 创建用户名及密码
    mysql 查询user 表结构
    mysql5.7 备份
    mysql 查询用户权限
    mysql 更改某表的字段长度
    centos7 搭建zabbix3.4
    关于存储过程return 和 output 获取
    jquery easyui datagrid getSelections用法
    DateTime ToString
    C#操作DateTable导入到Excel简单方法
  • 原文地址:https://www.cnblogs.com/crazyapple/p/3351477.html
Copyright © 2020-2023  润新知