题意:

      题意,哎!说道题意就蛋疼啊,比赛的时候就愣是把这个题目读成数字可以随意组合,比如123 可以拆成1 23 ,12 3 ,1 2 3,结果显然,水题当神题,各种想不出来,然后就显然的悲剧了,现在说下这个题目的意思给你一个串问你最少多少步操作可以把这个串变成合格的表达式组,每个合格表达式都是AB*的形式,A,B是数字,而且是1位的数字,只能是1位<哎!比赛的时候sb了>,然后AB*可以变成一个数字,也是1位的,是谁不重要,操作有两种,一个是在任意位置上添加一个字母1-9或者是*,另一个就是可以任意交换两个字符,问你变成合格的组合的最少步数,好像没说明白题意啊,那么我在举几个例子。1*1:我们可以直接把中间的*和后面的1交换,变成11*,11*可以转换成数字了,答案是1步11*234**:我们先把11*变成数字假如是A。34*变成B,那么就是A2B*
然后2B*可以转换成一个数字了C,加上前面的A还是一个可发数字AC,所以是0步。*:要在前面加两个数字变成AB*才能转换成一个纯数字串 所以是2

思路:

      首先我们要知道,假如最终的*个数为x,最终的数字个数a肯定是 a >= x + 1,这样的话我们的策略可以这样,我们先看看数字个数够不够,如果不够,那么先把数字填够,<这里当然是填到等于x+1的个数了,能剩则剩>,还有就是要知道,根本不用填*因为填*就是在为自己增加负担,填问数字我们就可以线性扫了,从前往后,对于每一个*如果前面的数字个数不满足了,那么就把当前的*和最后面的一个数字交换就行了,这样有点贪心的意思,具体看代码吧。





#include<stdio.h> 

#include<string.h>

#include<queue>

int num[1100];

char str[1100];

int main ()

{

   int t ,i ,Ans;

   scanf("%d" ,&t);

   while(t--)

   {

      scanf("%s" ,str);

      int l = strlen(str);

      int s1 = 0 ,s2 = 0;

      for(i = 0 ;i < l ;i ++)

      {

         if(str[i] == '*') num[i+1] = 1 ,s1 ++;

         else num[i+1] = 0 ,s2 ++;

      }  

      int now = 0;

      if(s2 < s1 - 1) now =  s1 + 1 - s2;

      Ans = now;

      for(i = 1 ;i <= l ;i ++)

      {

         if(num[i]) 

         {

            if(now >= 2) now --;

            else

            {

               Ans ++;

               for(int j = l ;j > i ;j --)

               if(!num[j])

               {

                  int t = num[i];

                  num[i] = num[j];

                  num[j] = t;

                  now ++;

                  break;   

               }

            }

         }

         else now ++;

      }

      if(!num[l]) Ans ++; 

      if(!s1) Ans = 0;

      if(num[1] && l == 1) Ans = 2; 

      printf("%d\n" ,Ans);

   }

   return 0;

}


Known Notation 39届亚洲赛牡丹江站K题的更多相关文章

  1. Building Fire Stations 39届亚洲赛牡丹江站B题

    题意:      给你一棵树,让你再里面选取两个点作为**点,然后所有点的权值是到这两个点中最近的那个的距离,最后问距离中最长的最短是多少,输出距离还有那两个点(spj特判). 思路:      现场 ...

  2. Average Score39届亚洲赛牡丹江站A题

    题意:       A班有n个人,B班有m个人,然后现在给你n-1个A班人的成绩,和m个B班人的成绩,然后题目要求求出A班剩下的没给成绩那个人的成绩范围,要求是这个人从A班转到B班后能使A,B的平均分 ...

  3. 2018ICPC网络赛(焦作站)K题题解

    一.题目链接 https://nanti.jisuanke.com/t/31720 二.题意 给$N$种船只,第$i$种船的载重量是$V_i$,数量是$2^{C_i}-1$.接下来有$Q$次询问,每次 ...

  4. 2014ACM/ICPC亚洲区域赛牡丹江站汇总

    球队内线我也总水平,这所学校得到了前所未有的8地方,因为只有两个少年队.因此,我们13并且可以被分配到的地方,因为13和非常大的数目.据领队谁oj在之上a谁去让更多的冠军.我和tyh,sxk,doub ...

  5. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-A ( ZOJ 3819 ) Average Score

    Average Score Time Limit: 2 Seconds      Memory Limit: 65536 KB Bob is a freshman in Marjar Universi ...

  6. zoj 3822 Domination 概率dp 2014牡丹江站D题

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  7. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation

    Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation ...

  8. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-I ( ZOJ 3827 ) Information Entropy

    Information Entropy Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Information ...

  9. 【2017 ICPC亚洲区域赛沈阳站 K】Rabbits(思维)

    Problem Description Here N (N ≥ 3) rabbits are playing by the river. They are playing on a number li ...

随机推荐

  1. Nginx解析漏洞复现以及哥斯拉连接Webshell实践

    Nginx解析漏洞复现以及哥斯拉连接Webshell实践 目录 1. 环境 2. 过程 2.1 vulhub镜像拉取 2.2 漏洞利用 2.3 webshell上传 2.4 哥斯拉Webshell连接 ...

  2. Vue入门干货,以及遇到的坑

    一.安装环境及Vue脚手架搭建 参考文档:https://www.jianshu.com/p/1626b8643676 二.开发文档 官方文档:https://cn.vuejs.org/v2/guid ...

  3. reverseLinkedList(翻转链表)

    ReverseLinkedList(翻转链表) 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.非连续.非顺序指的是,通过指针把一组零散的内存块串 ...

  4. TEB 、TIB、PEB--Vista 32

    TEB struct TEB typedef struct _TEB { NT_TIB NtTib; PVOID EnvironmentPointer; CLIENT_ID ClientId; PVO ...

  5. 攻防世界 reverse Newbie_calculations

    Newbie_calculations Hack-you-2014 题目名百度翻译成新手计算,那我猜应该是个实现计算器的题目.... IDA打开程序,发现一长串的函数反复调用,而且程序没有输入,只有输 ...

  6. [换根DP]luogu P3647 [APIO2014]连珠线

    题面 https://www.luogu.com.cn/problem/P3647 不重复地取树中相邻的两条边,每次得分为两条边权和,问最大得分 分析 容易想到状态 f[i][0/1] 分别表示 i ...

  7. Ubuntu20.04linux内核(5.4.0版本)编译准备与实现过程-编译前准备(1)

    最近项目也和linux kernel技术有关,调试内核和内核模块.修改内核源码,是学习内核的重要技术手段之一.应用这些技术时,都有一本基本的要求,那就是编译内核.因此,在分析内核调试技术之前,本随笔给 ...

  8. [go-linq]-Go的.NET LINQ式查询方法

    关于我 我的博客|文章首发 开发者的福音,go也支持linq了 坑爹的集合 go在进行集合操作时,有很不舒服的地方,起初我真的是无力吐槽,又苦于找不到一个好的第三方库,只能每次写着重复代码.举个栗子 ...

  9. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  10. 简单了解Git

    目录 Git命令 如何将一个新建的文件添加到Git仓库 版本控制 本地的项目丢到Gitee上 代码修改以及推送步骤 分支管理 Git命令 ​ 1.git init创建git本地仓库 ​ 2.ls 查看 ...