• ZOJ


    题意:

    给出一个字符串,长度为9,包含三种各三个字母"a","g","o",如果一次消除连续三个一样的分数+1,消完自动向左补齐
    其中可以消去任意字母,以求得更大的分数

    思路:

    1、如果能够消去两个xxx那么一定能消去第三个,那么答案为3
    2、如果只能找到一个xxx,那么答案一定是 2,因为必须舍弃一个消除才能得到一组xxx
    3、没有找到xxx,那么有两种情况,一种是1,一种是2,枚举三个字母,暴力删除后进行判断xxx的存在,如果存在,那么答案是2,不存在答案是1

    代码:

    #include<iostream>
    #include<string>
    using namespace std;
    string sss[4] = {"ggg", "ooo", "aaa"};
    string s[4] = {"g","o","a"};
    int deal(string str, int sum) {
    	int t = 4;
    	while(t--) {
    		for(int i = 0; i <= 2; i++) {
    			int index = str.find(sss[i]);
    			if(index != -1) {
    				str = str.substr(0,index)+str.substr(index+3,str.size());
    				sum ++;
    			}
    		}
    	}
    	return sum;
    }
    int del(string str) {
    	int ans = -1;
    	for(int i = 0; i <= 2; i++) {
    		string tmp = str;
    		int index = tmp.find(s[i]);
    		while(index != -1) {
    			tmp = tmp.substr(0,index)+tmp.substr(index+1,tmp.size());
    			index = tmp.find(s[i]);
    		}
    		ans = max(deal(tmp,0), ans);
    	}
    	if(ans == 0) return 1;
    	else return ans;
    }
    int main() {
    	string str;
    	int t;
    	cin >> t;
    	while(t--) {
    		cin >> str; 		 
    		int sum = deal(str, 0);
    		if(sum == 3) cout << "3" << endl;
    		else if(sum == 1) cout << "2" << endl;
    		else cout << del(str) << endl;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    一个请求在Struts2框架中的处理流程
    最大公约数和最小公倍数--java实现
    项目技术总结
    项目学习经验
    MyEclipse Project Migration功能中文简单介绍
    RSA的傻瓜原理
    Class.forName()的作用
    matplotlib 画封闭图像并填充
    matplotlib 做图通过弹出窗口展示 spyder
    pyodbc 一些内容
  • 原文地址:https://www.cnblogs.com/somliy/p/9737323.html
Copyright © 2020-2023  润新知