2014牡丹江——Known Notation
- 题意:
输入一个长度不超过1000的字符串,包含数字(1-9)和星号(*)。字符串中的空格已经丢失,所以连起来的数字串能够看成很多分开的数。也能够看成连续的数,即能够随意加入空格。如今有两种操作:1)在任何位置加入随意类型的字符(数字或者星号) 2)交换字符串中的随意两个字符
求:最少操作多少次,使得得到的串是一个合法的逆波兰式 - 分析:
对于n个星号,n+1个数字的字符串,假设将星号都移动到串的末尾。那么一定是合法的
对于操作1,假设须要插入数字,那么插入到字符串的最前边是最优的
对于操作2,仅仅可能将星号和数字交换。而且将星号移到了字符串的后边
那么,先对串进行操作1,使得数字个数不小于星号的个数加一;然后从左到右扫描字符串,假设当前星号前边的数字和星号不满足相应关系(同上)。须要将当前星号与最后一个数字交换;最后,假设字符串最后不是星号。答案加一 - 注意:
假设最后得到的串最后不是星号。那么必定答案加一
假设输入没有星号。那么答案是0
const int maxn = 1100; char s[maxn];
int n;
vector<int> v;
int main()
{
int T;
RI(T);
while (T--)
{
v.clear();
RS(s);
n = strlen(s);
int num = 0, sig = 0;
REP(i, n)
{
if (s[i] == '*') sig++;
else
{
v.push_back(i);
num++;
}
}
int ans = 0;
int preadd = 0;
if (!sig)
{
ans = 0;
}
else
{
if (num < sig + 1)
{
preadd = sig + 1 - num;
ans += preadd;
} int sig_num = 0; for (int i = 0; i < n; i++)
{
if (s[i] == '*')
{
sig_num++;
if (preadd < sig_num + 1)
{
int sz = v.size();
int id = v[sz - 1];
v.pop_back();
swap(s[i], s[id]); sig_num--;
preadd++;
ans++;
}
}
else preadd++;
} if (s[n - 1] != '*')
ans++;
}
printf("%d\n", ans); }
return 0;
}
2014牡丹江——Known Notation的更多相关文章
- 2014牡丹江——Hierarchical Notation
problemId=5380" style="background-color:rgb(51,255,51)">题目链接 字符串模拟 const int MAXN ...
- ZOJ 3829 Known Notation (2014牡丹江H称号)
主题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=5383 Known Notation Time Limit: 2 S ...
- 2014牡丹江K Known Notation
Known Notation Time Limit: 2 Seconds Memory Limit: 65536 KB Do you know reverse Polish notation ...
- ACM学习历程——ZOJ 3829 Known Notation (2014牡丹江区域赛K题)(策略,栈)
Description Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathema ...
- 2014 牡丹江区域赛 B D I
http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=358 The 2014 ACM-ICPC Asia Mudanj ...
- 2014牡丹江区域赛H(特里)ZOJ3826
Hierarchical Notation Time Limit: 2 Seconds Memory Limit: 131072 KB In Marjar University, stude ...
- The 2014 ACM-ICPC Asia Mudanjiang Regional Contest(2014牡丹江区域赛)
The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 题目链接 没去现场.做的网络同步赛.感觉还能够,搞了6题 A:这是签到题,对于A堆除掉.假设没剩余 ...
- zoj 3820(2014牡丹江现场赛B题)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5374 思路:题目的意思是求树上的两点,使得树上其余的点到其中一个点的 ...
- 2014牡丹江网络zoj3816Generalized Palindromic Number(dfs或者bfs)
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> ...
随机推荐
- Cocos2dx报OpenGL error 0x0506错误
近期做第三方sdk接入时,发现iOS8系统下,进行银联充值后,返回游戏有很大几率会报 OpenGL error 0x0506............ 之类的绘制问题,游戏卡死,花了很长时间,一直没有头 ...
- JavaScript在IE浏览器和Firefox浏览器中的差异总结
JavaScript在IE浏览器和Firefox浏览器中存在一些差异,以下对这些差异部分进行了总结,以及解决方案: 1.HTML对象的 id 作为对象名的问题 IE:HTML 对象的 ID 可以作为 ...
- nginx缓存设置
http://linux008.blog.51cto.com/2837805/547236 目的:缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,sw ...
- spark-streaming-kafka-0-10源码分析
转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/7767621.html 本文所研究的spark-streaming代码版本为2.3.0-SNAPSHO ...
- zookeeper 批量启动的脚本
#!/bin/shecho "start zkServer"for i in 2 3 4dossh mini$i "source /etc/profile;/usr/l ...
- Yarn源码分析之事件异步分发器AsyncDispatcher
AsyncDispatcher是Yarn中事件异步分发器,它是ResourceManager中的一个基于阻塞队列的分发或者调度事件的组件,其在一个特定的单线程中分派事件,交给AsyncDispatch ...
- Colossal Fibonacci Numbers! UVA 11582 寻找循环节
/** 题目:Colossal Fibonacci Numbers! UVA 11582 链接:https://vjudge.net/problem/UVA-11582 题意:f[0] = 1, f[ ...
- python中SQL的使用
# 常用的关系型数据库有 mysql postgresql sqlite 等(具体区别上课再说) # # 传统数据库以表的形式存储数据 # 一张表可以有很多个字段 # 以用户表为例, 存储 4 个数据 ...
- 第一百九十一节,jQuery EasyUI 入门
jQuery EasyUI 入门 学习要点: 1.什么是 jQuery EasyUI 2.学习 jQuery EasyUI 的条件 3.jQuery EasyUI 的功能和优势 4.其他的 UI 插件 ...
- jdbc 中 excute executeUpdate的用法作用
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...