[CSP-S模拟测试]:密州盛宴(贪心)
江城子·密州出猎
老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。为报倾城随太守,亲射虎,看孙郎。
酒酣胸胆尚开张,鬓微霜,又何妨!持节云中,何日遣冯唐?会挽雕弓如满月,西北望,射天狼。
(这首词通过描写一次出猎的壮观场面,借历史典故抒发了作者杀敌为国的雄心壮志,体现了为了效力抗击侵略的豪情壮志,并委婉地表达了期盼得到朝廷重用的愿望)
题目传送门(内部题29)
输入格式
输入包含多组数据,对于每组数据:
第一行包含两个正整数$n$和$m,n$的意义如上所述,$m$表示接下来的$m$行
第二行至$m+1$行,每行一个$01$串$s_i$和一个正整数$t_i$,表示这个串需要重复$t_i$次。
(保证最后的串长度为$2n$)
最后以$n=0,m=0$结束输入。
输出格式
对于每组数据:
如果有解,输出一个正整数$C$,意义如题所述。
否则输出$"-1"$(不含引号)
样例
样例输入:
5 3
1 3
0 5
11 1
样例输出:
2
数据范围与提示
样例解释:
首先初始菜品的序列为$1110000011$,那么我们将其变为$0011100011$,答案为$2$
数据范围:
$n\leqslant {10}^{18},m\leqslant {10}^5,t_i\leqslant {10}^{18},S$的总长度$\leqslant {10}^6,$数据组数$\leqslant 5$。
题解
首先所有时间必须所有人都在吃菜。
显然,类型为$0$的菜品越靠前越优。并且,为$0$的菜品不能超过$n$个。从后面推,我们把为$1$的菜品设为$+1$,为$0$的菜品设为$-1$,然后从末尾开始计算后缀和。一但后缀和到了$-2$,就说明到了苏东坡没法吃菜的地步。所以说只要保证后缀和一直大于等于$-1$,那么这个就一定可以在$N$分钟内解决。
因此,我们希望每份为$1$的菜品后移$C$位,使后缀和一直不小于$-1$。
可以从末尾挑出$C$(这里为$2$)份为$0$的菜品,全部安排在开头。
计算后缀和。我们可以发现,每将一份为$0$的菜品移动到前面去,后缀和就会全部加$1$。所以说,我们只要计算整个序列中后缀和最小值是多少。每一个小段都可以算出后缀和的贡献。然后我们就可以求出这个值,假设是$-k$。那么最终答案就是$k-1$。
时间复杂度$\Theta(\sum S)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
long long n,m,t;
char ch[100001];
pair<long long,long long> pos[100001];
long long one,k,pre;
int main()
{
while(1)
{
memset(pos,0,sizeof(pos));
k=pre=one=0;
scanf("%lld%lld",&n,&m);
if(!n&&!m)break;
for(int i=1;i<=m;i++)
{
scanf("%s%lld",ch+1,&t);
for(int j=strlen(ch+1);j;j--)
if(ch[j]-'0')
{
one+=t;
pos[i].first++;
}
else
{
pos[i].first--;
pos[i].second=min(pos[i].second,pos[i].first);
}
pos[i].first*=t;
}
if(one<n){puts("-1");continue;}
for(int i=m;i;i--)
{
k=min(k,pos[i].second+pre);
pre+=pos[i].first;
}
printf("%lld\n",max(0LL,-k-1));
}
return 0;
}
rp++
[CSP-S模拟测试]:密州盛宴(贪心)的更多相关文章
- [CSP-S模拟测试]:C(三分+贪心)
题目传送门(内部题46) 输入格式 第一行$3$个整数$n,m,t$.第二行$n$个整数,表示$P_i$.接下来$m$行每行两个整数,表示$L_i,R_i$. 输出格式 一行一个整数表示答案. 样例 ...
- [CSP-S模拟测试]:括号密码(贪心)
题目描述 在“无限神机”的核心上,有一个奇怪的括号密码,密码初始已经有一个括号序列,有$n$个限制条件,每个限制条件描述为$l_i$和$r_i$,表示区间$[l_i,r_i]$的括号序列必须合法.调整 ...
- [CSP-S模拟测试]:trade(反悔贪心)
题目传送门(内部题62) 输入格式 第一行有一个整数$n$.第二行有$N$个整数:$a_1\ a_2\ a_3\cdot\cdot\cdot a_n$. 输出格式 一行一个整数表示最大收益. 样例 样 ...
- [CSP-S模拟测试]:Graph(图论+贪心)
题目描述 给定一张$n$个点$m$条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通你想在这张图上进行若干次旅游,每次旅游可以任选一个点$x$作为起点,再走到一个与 $x$直接有边相连的点$ ...
- [CSP-S模拟测试]:虎(DFS+贪心)
题目传送门(内部题15) 输入格式 第一行一个整数$n$,代表点数接下来$n-1$行,每行三个数$x,y,z$,代表点$i$与$x$之间有一条边,若$y$为$0$代表初始为白色,否则为黑色,若$z$为 ...
- [CSP-S模拟测试]:Emotional Flutter(贪心)
题目传送门(内部题51) 输入格式 第一行一个整数$t$表示数据组数.每组数据的第一行有三个整数$s,k,n$.第二行有$n$个整数$A_1,A_2,...,A_n$,依次表示黑白条的长度. 输出格式 ...
- 联赛模拟测试25 C. Repulsed 贪心+树形DP
题目描述 分析 考虑自底向上贪心 \(f[x][k]\) 表示 \(x\) 下面距离为 \(k\) 的需要灭火器的房间数,\(g[x][k]\) 表示 \(x\) 下面距离为 \(k\) 的多余灭火器 ...
- [CSP-S模拟测试]:字符交换(贪心+模拟)
题目传送门(内部题136) 输入格式 输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$. 输出格式 输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作 ...
- 0829NOIP模拟测试赛后总结
这次发誓不会咕咕咕! 80分rank30完美爆炸. 拿到题目苏轼三连???貌似三篇古诗文我都会背啊hhh.爆零警告 T1没啥思路,打完暴力后想了大约20分钟决定分解个因数,在b次方中每一次方选择一个约 ...
随机推荐
- PostgreSQL 在视频、图片去重,图像搜索业务中的应用
摘要: PostgreSQL 在视频.图片去重,图像搜索业务中的应用作者digoal日期2016-11-26标签PostgreSQL , Haar wavelet , 图像搜索 , 图片去重 , 视频 ...
- WebService登陆验证四种方式
在这个WEB API横行的时代,讲WEB Service技术却实显得有些过时了,过时的技术并不代表无用武之地,有些地方也还是可以继续用他的,我之所以会讲解WEB Service,源于我最近面试时被问到 ...
- mybatis批量插入、更新和删除
https://blog.csdn.net/m0_37981235/article/details/79131493 https://www.jb51.net/article/132823.htm
- java 工厂模式 从无到有-到简单工厂模式-到工厂方法模式-抽象工厂模式
工厂模式定义(百度百科): 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工 ...
- 《JAVA设计模式》之备忘录模式(Memento)
在阎宏博士的<JAVA与模式>一书中开头是这样描述备忘录(Memento)模式的: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. 备忘录 ...
- python学习第三十一天函数的嵌套及函数的作用域
python函数的嵌套是指在函数里面嵌套另外一个函数,可以嵌套更多,函数一旦套用了另外一个函数,他的作用域就已经形成,可以通过global关键词改变变量的作用域,下面详细说明函数的嵌套及函数的作用域 ...
- k8s应用配置详解
1. 概述 k8s主要通过Object定义各种部署任务(例如:部署应用.部署Ingress路由规则.部署service等等),通过kubectl命令远程操作k8s集群. Object的定义通常以Yam ...
- Mybatis-技术专区-中的条件查询createCriteria example里面的条件
之前用Mybatis框架反向的实体,还有实体里面的Example,之前只是知道Example里面放的是条件查询的方法,可以一直不知道怎么用,到今天才开始知道怎么简单的用. 在我们前台查询的时候会有许多 ...
- 各种设备在linux中的文件名
各种设备在linux中的文件名: 设备 设备在linux内的文件名 ide硬盘 /dev/ha[a-d] scs硬盘 /dev/sd[a-p] u盘 /dev/sd[a-p](与SAT ...
- 【学习总结】GirlsInAI ML-diary day-20-初识 Kaggle
[学习总结]GirlsInAI ML-diary 总 原博github链接-day20 初识kaggle 1-注册一个账号(由于被谷歌收购,因此可能需要梯子) 2-Competition - 学会看一 ...