宁波工程学院 [1369] A Breaking Computer deque的应用

  • hnust_xiehonghao

  • [1369] A Breaking Computer

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • Oh my god.My computer is break.When I writing something,the home and the end always is working.But I also write too quakily,
    even I don't see the screen.OK,when I finish a work ,can you tell me the work become in end?
    We modified the sample output, please check it.
  • 输入
  • This have some cases.
    Every case have a sentence(length< 200000 Include (A->Z a->z 0->9)).Then '[' is the home,']' is the end;
  • 输出
  • Input a sentence.

    Printf the finally sentence.
  • 样例输入
  • 123[4
    123[45]6
    123[45]6[7]8
    
  • 样例输出
  • 4123
    451236
    74512368
    
  • 提示
  • 来源
  • Three God
  • 操作

     

    http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1369

    题意:输入一串字符  由于电脑坏了     有可能输入的过程中 鼠标自己乱跑 可能跑到字符串的开头 和结尾   [ 表示输入的过程中跑到了开头  ] 表示跑到了末尾

    比如123[45]6[7]8    先输入123  此时 [  跑到了开头    输入45 变成了  45123    遇到  ]  跑到最后   输入6  变成451236   

    之后遇到 [   跑到开头 输入7变成了 7451236     之后遇到 ]   跑到最后   输入8  变成了  答案74512368

     

     

    思路 双向队列

     

    #include<stdio.h>
    #include<deque>
    #include<vector>
    using namespace std;
    char s[200005];
    int main()
    {
    	deque<char>dq(20);
    	deque<char>::iterator it;
    	vector<char>a;
    	vector<char>::iterator ii;
    	int i,flag=0,last;
             while(scanf("%s",s)!=EOF)
    		 {
    			 while(!dq.empty())
    				 dq.pop_front();
    			 a.clear();
    			 flag=0;last=0;
    			 for(i=0;s[i]!='\0';i++)
    			 {
    				 if(s[i]!='['&&s[i]!=']')
    				 {
    					 if(flag)
    					 {
    					        a.push_back(s[i]);
    					 }
    					 else
    						 dq.push_back(s[i]);
    					 continue;
    				 }
    				 if(s[i]=='[')
    				 {
    					 flag=1;
    					 if(a.empty()) continue;
    					ii=a.end();
    					ii--;
    					for(;ii>=a.begin();ii--)
    						dq.push_front(*ii);
    					a.clear();
    				 }
    				 else if(s[i]==']')
    				 {
    				    flag=0;
                        if(a.empty()) continue;
    					ii=a.end();
    					ii--;
    					for(;ii>=a.begin();ii--)
    						dq.push_front(*ii);
    					a.clear();
    				 }
    			 }
    			 if(!a.empty())
    			 {
    					ii=a.end();
    					ii--;
    					for(;ii>=a.begin();ii--)
    						dq.push_front(*ii);
    					a.clear();
    			 }
    			 it=dq.begin();
    			 for(it;it!=dq.end();it++)
    				 printf("%c",*it);
    			 printf("\n");
    		 }
    
    		 return 0;
    }


      反思: 本题 我一开始用1个小时的时间 才拍出一个通过样例 的程序 居然发现自己理解错题意了    每次都是这样 自己的这个缺点很严重 以后千万要注意 

  • 另外 如果一个程序修改了很长时间  还很复杂 而且代码不长  一定要重新拍一个  这样思路更加清晰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的Deque是一种双端队列,它可以在两端进行插入和删除操作。Deque是"Double Ended Queue"的缩写。在Java中,Deque接口是Queue接口的子接口,它扩展了Queue接口,提供了更多的方法来支持双端操作。 可以使用Java的LinkedList类来实现Deque接口。下面是一个使用Deque的简单示例: ```java import java.util.Deque; import java.util.LinkedList; public class DequeExample { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); // 在队尾添加元素 deque.addLast("element1"); deque.offerLast("element2"); deque.offer("element3"); // offer方法等同于offerLast // 在队头添加元素 deque.addFirst("element4"); deque.offerFirst("element5"); System.out.println("Deque: " + deque); // 获取并移除队尾元素 String lastElement = deque.removeLast(); System.out.println("Removed last element: " + lastElement); // 获取并移除队头元素 String firstElement = deque.removeFirst(); System.out.println("Removed first element: " + firstElement); System.out.println("Updated Deque: " + deque); } } ``` 输出结果: ``` Deque: [element5, element4, element1, element2, element3] Removed last element: element3 Removed first element: element5 Updated Deque: [element4, element1, element2] ``` 在上面的示例中,我们使用了Deque的常用方法,如addFirst、addLast、offerFirst、offerLast、removeFirst和removeLast等。 希望这个示例对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值