Codeforces Gym 100114 D. Selection
Description
问选择一个序列上的所有数的最少操作次数,跟电脑上选择文件一样,输出操作方案.
Sol
贪心.
用Shift一段文件只能使用一次,之后必须一直按Ctrl了.
然后就是看用Shift选哪段区间了.
如果选 \((l,r)\) 那么答案就是 \((C_{l-1})+(C_{n}-C_{r})+(r-l+1-C_{r}+C_{l-1})+2\) .
化简就是 \(C_{n}+r-2C_{r}-(l-1)+2C_{l-1}+2\)
这个决策点是唯一的,只需要计算答案的时候顺便统计一下 \((l-1)+2C_{l-1}\) 就可以了.
否则就是用Ctrl全选上.
复杂度 \(O(n)\)
Code
#include<cstdio>
#include<iostream>
using namespace std; const int N = 100005; int n;
char c[N];
int s[N]; int ans[3]; int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout); scanf("%d",&n);scanf("%s",c+1);
for(int i=1;i<=n;i++) s[i]=s[i-1]+(c[i] == '*'); // for(int i=1;i<=n;i++) cout<<s[i]<<" ";cout<<endl; int tmp=0,u;ans[0]=n+2;
for(int i=1;i<=n;i++){
u=s[n]-2*s[i]+i+2;
if(2*s[tmp]-tmp+u < ans[0]){
ans[1]=tmp+1,ans[2]=i;
ans[0]=2*s[tmp]-tmp+u;
}
if(2*s[tmp]-tmp > 2*s[i]-i) tmp=i;
} if(ans[0]<s[n]){
printf("%d\n",ans[0]);
printf("%d\n",ans[1]);
printf("Shift+%d\n",ans[2]);
for(int i=1;i<ans[1];i++) if(s[i]-s[i-1]) printf("Ctrl+%d\n",i);
for(int i=ans[1];i<=ans[2];i++) if(s[i]-s[i-1]==0) printf("Ctrl+%d\n",i);
for(int i=ans[2]+1;i<=n;i++) if(s[i]-s[i-1]) printf("Ctrl+%d\n",i);
}else{
printf("%d\n",s[n]);
int f=0;
for(int i=1;i<=n;i++){
if(s[i]-s[i-1]){
if(!f) printf("%d\n",i),f=1;
else printf("Ctrl+%d\n",i);
}
}
} return 0;
}
Codeforces Gym 100114 D. Selection的更多相关文章
- Codeforces GYM 100114 D. Selection 线段树维护DP
D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descriptio ...
- codeforces GYM 100114 J. Computer Network 无相图缩点+树的直径
题目链接: http://codeforces.com/gym/100114 Description The computer network of “Plunder & Flee Inc.” ...
- codeforces GYM 100114 J. Computer Network tarjan 树的直径 缩点
J. Computer Network Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Des ...
- Codeforces Gym 100114 H. Milestones 离线树状数组
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...
- Codeforces GYM 100114 C. Sequence 打表
C. Sequence Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description ...
- Codeforces GYM 100114 B. Island 水题
B. Island Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description O ...
- Codeforces Gym 100114 A. Hanoi tower 找规律
A. Hanoi tower Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descript ...
- Codeforces Gym 100114 J. Computer Network
Description 给出一个图,求添加一条边使得添加后的图的桥(割边)最少. Sol Tarjan. 一遍Tarjan求割边. 我们发现连接的两个点一定是这两个点之间的路径上的桥最多,然后就可以贪 ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
随机推荐
- win7开防火墙,允许ping通
- Android学习笔记——download
该工程的功能是实现从网上的链接下载一个lrc文件和一个mp3文件 以下代码是MainActivity.java中的代码 package com.example.download; import com ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在上一篇中,我们已经初步开始使用Web Api了,但同时出现了一些很多不足之处,本章我们就着 ...
- python线程锁
import time,threading balance = 0 lock = threading.Lock() def change_it(n): global balance balance = ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- linux下设置进程优先级方法!
Linux系统下提升进程优先级的办法 Linux系统进程的优先级取值:-20 到 19,数越大优先级越低. 可以通过top命令来查看,NI那一列. 改变进程的优先级的方法有两种: www ...
- thinkphp学习笔记13-15集
13集: ThinkPHP3.1.3使用视频教程--后台登录验证与自动运行方法_标清.flv 14集: ThinkPHP3.1.3使用视频教程--自定义SESSION处理DB驱动与添加Redis处理驱 ...
- CSS浮动属性Float介绍
#cnblogs_post_body h6 {font-size: 16px;font-weight: bold;} 什么是CSS Float? float 是 css 的定位属性.在传统的印刷布局中 ...
- [译]git remote
git remote命令让我们可以创建, 查看, 删除一个到其他仓储的连结. 下图展示了我们的本地仓储有两个remote连接, 一个是中央仓储, 一个是其他开发者的仓储. 除了使用完整的url指向他们 ...
- [译]Probable C# 6.0 features illustrated
原文: http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated ========================= ...