广州市选2013 spacing

本文深入探讨了一种针对文章排版的算法,旨在找到在限定宽度的稿纸上排版时,能够达到最美观效果的排版方案。通过二分搜索确定连续空格的最大数量,确保单词顺序不变的同时,优化排版的视觉效果。

Description
排版是很有讲究的。假设稿纸的宽度是W个字符,长度不限,当你对一篇文章排版时,必须满足以下条件:

1.必须保持单词的次序。下图显示了对4个单词“This is a pen”在一张宽11字符的稿纸上排版的结果:

在这里插入图片描述

Input
输入的第一行是用空格分隔的两个正整数W和N(3<=W<=80000,2<=N<=50000),分别代表稿纸的宽度和单词数。接下来有N个正整数,第i个正整数xi代表第i个单词的长度(1<=xi<=(W-1)/2)。

Output
输出一个整数,代表最美观的排版中,最多出现多少个连续空格。

Sample Input
输入1:

11 4

4 2 1 3

输入2:

5 7

1 1 1 2 2 1 2

输入3:

11 7

3 1 3 1 3 3 4

输入4:

100 3

30 30 39

输入5:

30 3

2 5 3

Sample Output
输出1:

2

输出2:

1

输出3:

2

输出4:

40

输出5:

1

Data Constraint
2<=N<=50000

.
.
.
.
.
.
分析
第一眼就是二分(然而理解错题意把自己给推翻了)
先二分出空格的长度,再去检验

设f[i]表示能否以第i个单词为行末
那么显然f[i]可以由多个f[j]转移而来,即钦定j+1~i为一行
那么理论上j的上界为i-2,下界为一个使a[i]-a[j]+i-j-1<=w的,最小的j (bz)。

当某行单词数量减少时,空格数目会迅速增加
即若不考虑f[j]本身,那么j直接取bz就是最佳的选择。

.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int w,n;
bool f[50010];
long long a[50010];

bool check(int x)
{
	int bz=-1,j=0;
	memset(f,false,sizeof(f));
	f[0]=1;
	for (int i=1;i<=n-1;i++)
	{
		while (j<i&&a[i]-a[j]+((long long)x*(i-j-1))>=w)
		{
			if (f[j]==true) bz=j;
			j++;
		}
		if (a[i]-a[bz]+(i-bz-1)<=w&&bz!=-1) f[i]=true; else f[i]=false;
	}
	for (int i=n-1;i>=0;i--) 
		if (f[i]==true&&a[n]-a[i]+(n-i-1)<=w) return true;
	return false;
}

int main()
{
	scanf("%d%d",&w,&n);
	for (int i=1;i<=n;i++) 
	{
		int x;
		scanf("%d",&x);
		a[i]=a[i-1]+x;
	}
	int l=1,r=w-2,ans;
	while (l<=r)
	{
		int mid=(l+r)/2;
		if (check(mid)==true) 
		{
			ans=mid;
			r=mid-1;
		} else l=mid+1;
	}
	printf("%d",ans);
	return 0;
}
源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值