• 字符串行走得分


    游戏规则,给定一个字符串数组,初始行走方向向右,每经过一个自然数,得分加上自然数,自然数减一,遇到>则行走方向向右,<则行走方向向左,若遇到>或者<号的下一个位置也是大于小于号,则删除当前位置,数组容量减一。若走出边界则游戏终止,输出最终得分。
    输入n,m,q;
    然后输入长度为n的字符串数组,数组中元素为>,<或者自然数,数组中自然数最大不超过m。
    然后输入q对表示左边界和右边界的元素位置,输出得分。

    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<sstream>
    #include<stack>
    using namespace std;
    
    string tostring(int a){
    	stringstream ss;
    	ss<<a;
    	string res;
    	ss>>res;
    	return res;
    	
    }
    
    int toint(string & a){
    	stringstream ss;
    	ss<<a;
    	int res;
    	ss>>res;
    	return res;
    }
    
    int search(vector<string>arr,int left,int right){
    	stack<string>st_left;
    	stack<string>st_right;
    	for(int i=right;i>=left;i--){
    		st_left.push(arr[i]);
    	}
    	
    	int res=0;
    	int flag=1;
    	while(true){
    		if(flag==1){
    			if(st_left.empty()){
    				break;
    			}
    			
    			string tmp=st_left.top();
    			if(tmp=="<"){
    				flag=-1;
    				if(!st_right.empty()&&(st_right.top()==">"||st_right.top()=="<"))
    				        st_left.pop();
    				continue;
    			}
    			else if(tmp==">"){
    				flag=1;
    				st_left.pop();
    				if(!st_left.empty()&&(st_left.top()==">"||st_left.top()=="<"))
    				        continue;
    				st_right.push(tmp);
    			}
    			else{
    				if(tmp=="0")
    			   {
    			   	st_left.pop();
    			   	continue;
    			   }
    				res += toint(tmp);
    				st_left.pop();
    				tmp = tostring(toint(tmp)-1);
    				st_right.push(tmp);
    			}
    		}
    		else{
    			if(st_right.empty()){
    				break;
    			}
    			string tmp=st_right.top();
    			if(tmp==">"){
    				flag=1;
    			if(!st_left.empty()&&(st_left.top()==">"||st_left.top()=="<"))
    				    st_right.pop();
    				continue;
    			}
    			else if(tmp=="<"){
    				flag=-1;
    				st_right.pop();
    				if(!st_right.empty()&&(st_right.top()==">"||st_right.top()=="<"))
    				        continue;
    				st_left.push(tmp);
    			}
    			else{
    			   if(tmp=="0")
    			   {
    			   	st_right.pop();
    			   	continue;
    			   }
    				res += toint(tmp);
    				st_right.pop();
    				tmp = tostring(toint(tmp)-1);
    				st_left.push(tmp);
    			}
    		
    		}
    	}
    	return res;
    }
    int main ()
    {
    int n,m,q;
    cin>>n>>m>>q;
    vector<string>arr(n);
    for(int i=0;i<n;i++){
    	cin>>arr[i];
    }
    
    for(int i=0;i<q;i++){
    	int left,right;
    	cin>>left>>right;
    	cout<<search(arr,left-1,right-1)<<endl;
    }
    return 0;
    }
  • 相关阅读:
    Spring REST
    Spring整合CXF,发布RSETful 风格WebService
    ZT:阿里合伙人发文:十年磨一剑,自研数据库终拿世界第一
    转载:OutOfMemoryError系列(2): GC overhead limit exceeded
    SpringBoot/SpringMVC 下载本地文件
    Eclipse中查找接口实现类快捷键
    [java]察看两个日期间差多少秒/小时/天
    MongoDB(mongodb-win32-x86_64-enterprise-windows-64-4.2.1-signed.msi)下载,启动和插入数据,查询
    简繁瘦金体下载
    方正宋刻本秀楷字体下载
  • 原文地址:https://www.cnblogs.com/qiuhaifeng/p/11490305.html
Copyright © 2020-2023  润新知