! AHOI/HNOI2017大佬

摘要:
利用不等式解题,搜索剪枝SOL:首先可以发现保证自己不死和怼大佬是可以分开的一个算出最多可以用来怼大佬的天数,问题就转化为用天怼大佬是否成功先求出所有可能的讽刺值及其天数,惊人发现竟存的下!

利用不等式解题,搜索剪枝

! AHOI/HNOI2017大佬第1张
! AHOI/HNOI2017大佬第2张
SOL:

首先可以发现保证自己不死和怼大佬是可以分开的

一个(n^2DP)算出最多可以用来怼大佬的天数,问题就转化为用(n)天怼大佬是否成功

先求出所有可能的讽刺值及其天数,惊人发现竟存的下!看来要多尝试才好

这样攻击一次和零次的都可以轻易判断

攻击两次(讽刺值(f1,f2)天数(d1,d2)):

(f1+f2<=C,n-d1-d2>=C-f1-f2)

可以排序后,用一个指针记录第二次攻击进行到哪了(根据第一个式子,单调性)

((f1-d1)+(f2-d2)>=C-n)

记录(f2-d2)的最大值即可

注:

搜索时判重,若同一层出现了一样的值则无效

按理说讽刺值一样是应是保留天数少的,但(L)不一定一样,我们必须让它搜下去,若直接搜要爆掉

这样判可以保证数的构造唯一,(L)唯一,不会漏,也不多

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return f==1?x:-x;
}
#define ll long long
unordered_map<ll,bool>mp;
pair<int,int>dam[1111111];
#define fi(i) dam[i].first
#define se(i) dam[i].second 
struct node{int i,f,l;};
const int N=304;
int n,m,day,tot,mx,mc;
int a[N],w[N],c[N],g[N][N];
void bfs(){
	queue<node>q;
	q.push((node){1,1,0});
	while(!q.empty()){
		node u=q.front();q.pop();
		if(u.i==day)continue;
		q.push((node){u.i+1,u.f,u.l+1});
		if(u.l>1&&(ll)u.f*u.l<=mx&&!mp[(ll)u.f*u.l*100+u.i+1]){
			q.push((node){u.i+1,u.f*u.l,u.l});
			dam[++tot]=make_pair(u.f*u.l,u.i+1);
			mp[(ll)u.f*u.l*100+u.i+1]=1;
		}
	}
}
int main(){
	n=read();m=read();mc=read();
	for(int i=1;i<=n;i++)a[i]=read();
	for(int i=1;i<=n;i++)w[i]=read();
	for(int i=1;i<=m;i++)mx=max(mx,c[i]=read());
	for(int i=1;i<=n;i++)
		for(int j=a[i];j<=mc;j++){
			g[i][j-a[i]]=max(g[i][j-a[i]],g[i-1][j]+1);
			g[i][min(mc,j-a[i]+w[i])]=max(g[i][min(mc,j-a[i]+w[i])],g[i-1][j]);
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=mc;j++)day=max(day,g[i][j]);
	bfs();
	sort(dam+1,dam+tot+1);
	for(int i=1,fl,mn;i<=m;i++){
		if(c[i]<=day){puts("1");continue;}
		fl=0;mn=1e9;
		for(int j=tot,k=1;j;j--){
			while(k<=tot&&fi(j)+fi(k)<=c[i]){
				mn=min(mn,se(k)-fi(k));
				++k;
			}
			if(mn+c[i]-fi(j)<=day-se(j)){fl=1;break;}
			if(fi(j)<=c[i]&&c[i]-fi(j)<=day-se(j)){fl=1;break;}
		}
		if(fl==1)puts("1");
		else puts("0");
	}
	return (0-0);
}

免责声明:文章转载自《! AHOI/HNOI2017大佬》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇.NET Core分布式事件总线、分布式事务解决方案:CAPcss实现div中图片高度自适应并与父级div宽度一致下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ipadmini从9.3.5降级8.4.1并完美越狱

ipadmini之前是iOS9.3.5实在是卡的用不了,于是打算降级,但是尝试了包括改版本描述等很多方法一直失败。今天突然成功降级8.4.1并且完美越狱,运行流畅了非常多。方法如下:打开网址:https://www.i4.cn/news_detail_18447.html,下载对应设备的8.4.1自制固件,一般的固件是不可以的。...

IDEA 运行键是灰色

版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议。转载请附上原始来源链接和本声明。本文链接:https://blog.csdn.net/Butterfly_resting/article/details/89388149原因是我们的新项目没有选择源目录,如图所示:解决方案:IDEA提供了选择源目录的快速设置。右键单击src并选择MarkDire...

css设置文字多余部分显示省略号

如果只显示一行,则可以使用以下方法:  overflow:hidden;  text-overflow:ellipsis;  white-space:nowrap;如果需要显示多行,在需要设置的元素style中添加以下代码:  word-break:break-all;  text-overflow:ellipsis;  display:-webkit-bo...

从零开始制作Galgame——我的Ren'py学习笔记(一)

然后点击“启动工程”点击“开始游戏”效果应该是这样的好了,现在你就制作出了属于自己的第一个游戏角色在一般的Galgame中,不是所有话都是“旁白”说的,一个完整的游戏里面应该有主角那么,怎么在ren'py中定义角色呢我们把刚才的代码更改一下definel=Characterlabelstart:l"HelloWorld!...

java实现word转pdf文件(高效不失真)

importjava.io.File;importjava.io.FileOutputStream;importjava.io.InputStream;importorg.aspectj.weaver.ast.Test;importcom.aspose.words.Document;importcom.aspose.words.License;importc...

linux下ifconfig, DNS以及route配置

Linux基本网络配置命令1.ifconfig查看网络接口信息。普通用户使用的ifconfig的完整路径:/sbin/ifconfigifconfig网络接口名称:显示指定接口的详细信息。...