Ice-sugar Gourd

3083: Ice-sugar Gourd

描述

Ice-sugar gourd, “bing tang hu lu”, is a popular snack in Beijing of China. It is made of some fruits threaded by a stick. The complicated feeling will be like a both sour and sweet ice when you taste it. You are making your mouth water, aren’t you?

I have made a huge ice-sugar gourd by two kinds of fruit, hawthorn and tangerine, in no particular order. Since I want to share it with two of my friends, Felicia and his girl friend, I need to get an equal cut of the hawthorns and tangerines. How many times will I have to cut the stick so that each of my friends gets half the hawthorns and half the tangerines? Please notice that you can only cut the stick between two adjacent fruits, that you cannot cut a fruit in half as this fruit would be no good to eat.

输入

The input consists of multiply test cases. The first line of each test case contains an integer, n(1 <= n <= 100000), indicating the number of the fruits on the stick. The next line consists of a string with length n, which contains only ‘H’ (means hawthorn) and ‘T’ (means tangerine).
The last test case is followed by a single line containing one zero.

输出

Output the minimum number of times that you need to cut the stick or “-1” if you cannot get an equal cut. If there is a solution, please output that cuts on the next line, separated by one space. If you cut the stick after the i-th (indexed from 1) fruit, then you should output number i to indicate this cut. If there are more than one solution, please take the minimum number of the leftist cut. If there is still a tie, then take the second, and so on.

样例输入

4
HHTT
4
HTHT
4
HHHT
0

样例输出

2
1 3
1
2
-1

 

最多切两刀可以分只要找到第一刀的位置,一段的位置一定是第一道开始的n/2个,找这个点的时候用一下替换的思想,如果直接查找会超时。

#include<bits/stdc++.h>
using namespace std;
int main()
{
  std::ios::sync_with_stdio(false);
  int n;
  while(cin>>n)
  {
      if(n==0) break;
      int cct=0,cch=0,ct=0,ch=0;
      char s[100010];
      for(int i=0;i<n/2;i++)
        {
            cin>>s[i];
            if(s[i]==‘H‘)
            {
                cch++;
                ch++;
            }
            else
            {
                cct++;
                ct++;
            }
        }
     for(int i=n/2;i<n;i++)
     {
         cin>>s[i];
            if(s[i]==‘H‘)
                cch++;
            else
                cct++;
     }
     if(cch%2!=0||cct%2!=0)
        cout<<"-1"<<endl;
     else
     {
         if(ch==cch/2&&ct==cct/2)
         {
             cout<<"1"<<endl;
             cout<<n/2<<endl;
         }
         else
         {
             for(int i=0;i<n/2;i++)
             {
                if(s[i]==‘H‘&&s[i+n/2]!=‘H‘)
                {
                    ch--;
                    ct++;
                }
                else if(s[i]==‘T‘&&s[i+n/2]!=‘T‘)
                {
                    ct--;
                    ch++;
                }
             if(ch==cch/2&&ct==cct/2)
             {
                 cout<<"2"<<endl;
                 cout<<i+1<<" "<<i+(n/2)+1<<endl;
                 break;
             }
             }
         }
     }
  }
}

原文地址:https://www.cnblogs.com/xbqdsjh/p/11575182.html

时间: 2024-11-09 13:31:45

Ice-sugar Gourd的相关文章

HDU 3305 Ice-sugar Gourd

Ice-sugar Gourd Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 936    Accepted Submission(s): 329 Problem Description Ice-sugar gourd, “bing tang hu lu”, is a popular snack in Beijing of China.

P3398 仓鼠找sugar

题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c)到图书馆(d).他们都会走最短路径.现在小仓鼠希望知道,有没有可能在某个地方,可以碰到他的基友? 小仓鼠那么弱,还要天天被zzq大爷虐,请你快来救救他吧! 输入输出格式 输入格式: 第一行两个正整数n和q,表示这棵树节点的个数和询问的个数. 接下来n-1行,每行两个正整数u和v,表示节点u到节点v之

ICE分布式文件管理系统——ICE环境搭建(其二)

上一博文,我们讲述了ICE这个中间件的基本认识. 接下来我们讲述开发环境搭建. 其过程主要分为三步: 安装GCC-4.4.6.安装ICE-3.4.2.安装QT-4.7.3. (本文是基于LINUX下的ICE-3.4.2的安装,如果已安装了GCC(版本高于GCC-4.4.6亦可),请直接安装ICE) 一.安装GCC: (gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/) 一般来说基于linux的操作系统都是默认安装了GCC的.假如说你的电脑没有的话 请百度一哈,可以解决

Zeroc Ice grid 研究学习

一.概念 slice: ice提供了自己的接口定义语言.用来定义rpc的接口和对象. ice.object: rpc调用的接口必须继承自ice.Object servant:ice.Object的实例化对象叫做servant,rpc调用的就是servant对象,因此servant需要线程安全 endpoints:客户端rpc调用servant的地址 icebox:servant的容器 icenode:icebox的容器 registry:注册中心,负责管理icenode的注册,负责和发布. 二.

洛谷 P3398 仓鼠找sugar

P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c)到图书馆(d).他们都会走最短路径.现在小仓鼠希望知道,有没有可能在某个地方,可以碰到他的基友? 小仓鼠那么弱,还要天天被zzq大爷虐,请你快来救救他吧! 输入输出格式 输入格式: 第一行两个正整数n和q,表示这棵树节点的个数和询问的个数. 接下来n-1行,每行两个正整

什么是ICE (Internet Communications Engine)

http://user.qzone.qq.com/77811970 直接在google上搜索ICE,出来的结果并不多,所以很多人就认为ICE是个神秘的东西,其实,国内已经有很多大型应用在使用ICE了.前段时间因为工作的关系被逼学习了ICE, 感觉不错的东西.我记录下入门的一些概念,希望对后来的学习者有所帮助.     什么是ICE  (Internet Communications Engine) 首先,ICE是一个中间件(如果不懂什么是中间件,请先G一下),该中间件的目的是为上层应用提供高效的

ICE安装

第一步,基于Windows下的安装,所以下载windows版的Ice: http://www.zeroc.com/download 第二步,安装Ice: 常规安装即可,可以选择安装目录,本次安装是在G:\Ice 第三步,设置Ice的环境变量: 主要有环境变量需要设置:path.classpath.ICE_HOME 例如: path:G:\Ice\bin; classpath:G:\Ice\lib\Ice.jar;G:\Ice\lib\Freeze.jar;G:\Ice\lib\db.jar; I

ICE中间件说明文档

1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         通信器 2.2.2         对象适配器 2.2.3         位置透明性 2.3        异步编程模型 2.3.1         异步方法调用 2.3.2         异步方法分派 2.4        订阅/发布编程模型 2.5        动态服务管理(IceBox) 2.6       

RFC学习笔记 -- 5245 ICE &amp; 3261 SIP

---------------------------------------------------------------------------- RFC list: 3550 (rtp/rtcp)  - 3711(srtp) - 5245 (ice) - 3261(sip) - 4575(sip-conference) - 4566(sdp) 5389 (stun) - 5766(turn) - 6455(websocket) - 6865(fec) - 2616(http) -----