ZOJ Crusaders Quest (2017CCPC秦皇岛赛区)
2017-11-04 21:28
411 查看
题解:
能量槽里有三种不同blocks,只要集齐连续三个相同的blocks就可以释放一次究极大招,问最多可以释放多少次究极大招。
根据例子可以知道,每次可以消除三个或者三个以下的相同且连续blocks, 例如 googgaaao,第一次可以消除aaa,然后整个序列就会向前合并变成googgo,第二次可以消除gg,g,oo,o,易得,可以释放两次究极大招。
这道题因为数据非常小,最多50个测试样例,而且blocks是固定的只有九个,不同的blocks只有3个,完全可以用暴力枚举的方法解决。
因为只有三种blocks,一旦消除某种blocks中的其中一个,那这种blocks就不可能组成三个释放大招,所以总共进行三次消除即可
枚举所有消除的方法
①枚举第一次消除的blocks种类(3种)
②枚举第二次消除的blocks种类(2种)
③枚举第三次消除的bocks种类(1种)
2 3都是嵌套在1中的。
能量槽里有三种不同blocks,只要集齐连续三个相同的blocks就可以释放一次究极大招,问最多可以释放多少次究极大招。
根据例子可以知道,每次可以消除三个或者三个以下的相同且连续blocks, 例如 googgaaao,第一次可以消除aaa,然后整个序列就会向前合并变成googgo,第二次可以消除gg,g,oo,o,易得,可以释放两次究极大招。
这道题因为数据非常小,最多50个测试样例,而且blocks是固定的只有九个,不同的blocks只有3个,完全可以用暴力枚举的方法解决。
因为只有三种blocks,一旦消除某种blocks中的其中一个,那这种blocks就不可能组成三个释放大招,所以总共进行三次消除即可
枚举所有消除的方法
①枚举第一次消除的blocks种类(3种)
②枚举第二次消除的blocks种类(2种)
③枚举第三次消除的bocks种类(1种)
2 3都是嵌套在1中的。
#include <set> #include <numeric> #include <cmath> #include <queue> #include <stack> #include <vector> #include <string> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #include <cctype> #include <string> #include <sstream> #include <map> #include <cstdlib> #include <functional> using namespace std; typedef long long LL; typedef unsigned long long ULL; #define REP(idx1,num1) for(LL idx1=0;idx1<(num1);idx1++) #define pb push_back #define empb emplace_back #define mk make_pair #define mpy(res,tmp) memcpy(res,tmp,sizeof(tmp)); #define mem(s) memset(s,0,sizeof(s)); const double EPS = 1e-6; const int maxn = 120 + 5; const int INF = (1 << 30); const int mod = 9875321; const char *p = "gao"; int find(string s, char ch){ int cnt = 0; for(int i = 0; i < s.length(); ++i){ if(s[i] != ch) cnt = 0; else cnt++; if(cnt == 3) break; } return cnt; } string change(string s, char ch){ string tmp; for(int i = 0; i < s.length(); ++i){ if(s[i] != ch) tmp += s[i]; } return tmp; } int main(){ int T; cin >> T; while(T--){ string s,tmp; cin >> s; //string tmp; string ori = s; int m = -1; int ans = 0; int tmpp1 = 0; int tmpp2,tmpp3; for(int i = 0; i < 3; ++i){ s = ori; ans = 0; int cnt = find(s, p[i]); if(cnt == 3) ans++; tmp = change(s, p[i]); string ori2 = tmp; tmpp1 = ans; for(int j = 0; j < 3; ++j){ s = ori2; ans = tmpp1; if( j == i) continue; int cnt2 = find(s,p[j]); if(cnt2 == 3) ans++; tmp = change(s, p[j]); string ori3 = tmp; tmpp2 = ans; for(int k = 0; k < 3; ++k){ s = ori3; ans = tmpp2; if( k == i || k == j) continue; int cnt3 = find(s, p[k]); if(cnt3 == 3) ans++; m = max(m,ans); } } } cout << m << endl; } return 0; }
相关文章推荐
- 2017CCPC秦皇岛 C题Crusaders Quest&&ZOJ3983【模拟+STL】
- ZOJ 3992 && 2017CCPC秦皇岛 L:One-Dimensional Maze
- ZOJ 3988 && 2017CCPC秦皇岛 H:Prime Set(二分匹配)
- 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
- ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot
- ZOJ 3987 Numbers 2017CCPC秦皇岛站G题 大整数 二进制 贪心
- 2017秦皇岛ICPC - C - Crusaders Quest【思维+暴力】
- ZOJ-3987 Numbers 2017CCPC秦皇岛站G题 (二进制、贪心)
- ZOJ 3993(2017CCPC秦皇岛站M题)Safest Buildings
- 2017 ccpc 秦皇岛C Crusaders Quest
- ZOJ 3983 && 2017CCPC秦皇岛 C:Crusaders Quest
- ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot
- (ccpc秦皇岛站)Crusaders Quest(暴力模拟)
- ZOJ - 3981 Balloon Robot (2017CCPC秦皇岛站A题 思维)
- ZOJ 3988 && 2017CCPC秦皇岛 H:Prime Set(二分匹配)
- ZOJ - 3985 String of CCPC (2017CCPC秦皇岛站 简单题)
- zoj&2017CCPC秦皇岛站C-蛮力&erase细节&STL-Crusaders Quest
- ZOJ 3985 && 2017CCPC秦皇岛 E:String of CCPC
- ZOJ - 3993 Safest Buildings (2017CCPC秦皇岛站 简单题)
- ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot