HDU 3363(分冰糖葫芦)
来源:互联网 发布:apache lucene 编辑:程序博客网 时间:2024/05/17 07:35
#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <cstring> #include <vector>#include <set>using namespace std;const int MAXN = 100000 + 10;int T;/*HDU 3363关键:①把串想象成一个环, 只要用一条过圆心的直线把环平分成两条链即可, 而由于它实际上是串, 因此已经被分过一次了, 因此可能还需要至少再分1次或2次②只要平分了一种, 剩下那种肯定也是已经平分的综上可知, 先找一个位置平分一种, 再找到这个位置关于圆心对称的另一个位置即可*/vector<int> cut1(char *str,int tmp){int h = tmp/2, t = (T-tmp)/2;// 一个人需要的H和T的个数 int i,j,k;for(i=j=k=0; i<T ; i++){if( str[i]=='H' ){if( j<h ){j++;}else{break;}}else{if( k<t ){k++;}else{break;}}}vector<int> vec;vec.push_back(i);if( i!=T/2 ){// 要切第二刀vec.push_back(i+T/2); }return vec; }vector<int> cut2(char *str,int tmp){int h = tmp/2, t = (T-tmp)/2;// 一个人需要的H和T的个数 int i,j,k;for(i=T-1, j=k=0; i>=0 ; i--){if( str[i]=='H' ){if( j<h ){j++;}else{break;}}else{if( k<t ){k++;}else{break;}}}i += 1;vector<int> vec;vec.push_back(i);if( i!=T/2 ){// 要切第二刀vec.push_back(i-T/2); }sort(vec.begin(),vec.end());return vec; }int main(){while( (cin>>T) && T>0 ){char str[MAXN];int tmp = 0;memset(str,0,sizeof(str));scanf("%s",str);T = strlen(str);for(int i=0; i<T; i++ ){if( str[i]=='H' ){tmp++;}}if( T%2==1 || tmp%2==1 || (T-tmp)%2==1 ){cout << -1 << endl;continue;}vector<int> vec1 = cut1(str,tmp);vector<int> vec2 = cut2(str,tmp);if( vec1.size()>vec2.size() ){vec1 = vec2;}else if( vec1.size()==vec2.size() && vec1[0]>vec2[0] ){vec1 = vec2;}else if( vec1.size()==vec2.size() && vec1[0]==vec2[0] ){if( vec1.size()==2 && vec1[1]>vec2[1] ){vec1 = vec2;}}cout << vec1.size() << endl;if( vec1.size()==1 ){cout << vec1[0];}else{cout << vec1[0] << " " << vec1[1];}cout << endl;}return 0;}
0 0
- HDU 3363(分冰糖葫芦)
- YT15-HDU-分pie
- HDU 1121差分
- hdu 1556 差分
- 排序(10分) HDU
- hdu 3400 3分 套 3分
- 【差分约束】hdu 3666
- hdu 3666 #差分约束
- hdu 3592 差分约束
- hdu 3666差分约束
- HDU 1531 差分约束
- hdu 3440 差分约束
- hdu 3440 差分约束
- hdu 1531(差分约束)
- hdu 1384 查分约束
- HDU-2096-分拆素数
- HDU 1538 海盗分金
- hdu 2050 折线分平面
- 【网络】(二)流协议粘包问题
- JVM监测工具和实践
- HDU 3368(翻转棋)
- POJ - 1182 食物链(种类并查集经典题)
- 仿QQ消息Listview侧滑置顶、删除
- HDU 3363(分冰糖葫芦)
- 笔试面试题总结(一)--- 软件开发
- 车皮编序问题
- java-LinkedHashMap和LinkedHashSet源码分析
- 0911Android基础网络技术之WebView控件
- c++中的前置声明
- HDU 3090
- 黑马程序员——C语言笔记之预处理指令
- XML文件中画一条横线或竖线,给一个textview画下划线