首页 > 其他分享 >Codeforces 1854E - Game Bundles

Codeforces 1854E - Game Bundles

时间:2023-08-11 23:00:26浏览次数:48  
标签:int Bundles 60 序列 Game 1854E ord dp rk

都这么会乱搞的吗/xia

随机生成若干 \(<30\) 的数直到它们当中和为 \(60\) 的子集个数 \(>k\) 为止。删去最后一个元素。然后考虑贪心确定 \(>30\) 的部分,具体方法是按照 \(dp_{60-x}\) 从大到小贪心选,如果剩余子集个数 \(\ge dp_{60-x}\) 就在序列中加入 \(x\)。如此随机化直到找到符合要求的序列为止。

证明的话不会,不过感性理解一下你随机出来的这个序列的 \(dp_{60-x}\) 应该近似于一个等比数列,有点类似于类比进制表示,所以你能随机出符合要求的序列的概率是很大的。

ll k;int ord[35],a[65];mt19937 rng(time(0));
int main(){
	scanf("%lld",&k);
	if(k<=60){printf("%lld\n",k);for(int i=1;i<=k;i++)printf("60 ");return 0;}
	for(int i=1;i<=30;i++)ord[i]=i+30;
	while(1){
		static ll dp[65];memset(dp,0,sizeof(dp));
		int lim=rng()%29+1,n=0;dp[0]=1;
		while(n<=60){
			n++;a[n]=rng()%lim+1;
			if(dp[60]+dp[60-a[n]]>k){--n;break;}
			for(int i=60;i>=a[n];i--)dp[i]+=dp[i-a[n]];
		}ll rk=k-dp[60];
		sort(ord+1,ord+31,[&](int x,int y){return dp[60-x]>dp[60-y];});
		for(int i=1;i<=30;i++)while(n<60&&rk>=dp[60-ord[i]])a[++n]=ord[i],rk-=dp[60-ord[i]];
		if(!rk){
			printf("%d\n",n);
			for(int i=1;i<=n;i++)printf("%d%c",a[i]," \n"[i==n]);
			return 0;
		}
	}
	return 0;
}

标签:int,Bundles,60,序列,Game,1854E,ord,dp,rk
From: https://www.cnblogs.com/tzcwk/p/Codeforces-1854E.html

相关文章

  • GAMES101笔记(04)
    本篇对应的是第七课上节课讲完了光栅化的内容,这节课讲的有深度测试,光照和着色深度测试我在学校看shader入门精要的时候有些印象,但也仅此而已了,我觉得还是要先补一下图形学的知识再去啃入门精要会好一些 深度缓存在计算机成像时,对于一个我们要输出的画面,如何确保画面上的东......
  • 2023-08-10:景区里有m个项目,也就是项目数组为int[][] game,这是一个m*2的二维数组 景区
    2023-08-10:景区里有m个项目,也就是项目数组为int[][]game,这是一个m*2的二维数组景区的第i个项目有如下两个参数:game[i]={Ki,Bi}Ki一定是负数,Bi一定是正数举个例子:Ki=-2,Bi=10如果只有1个人买票,单张门票的价格为:Ki*1+Bi=8所以这1个人游玩该项目要花8元如果有2......
  • 2023-08-10:景区里有m个项目,也就是项目数组为int[][] game,这是一个m*2的二维数组 景区
    2023-08-10:景区里有m个项目,也就是项目数组为int[][]game,这是一个m*2的二维数组景区的第i个项目有如下两个参数:game[i]={Ki,Bi}Ki一定是负数,Bi一定是正数举个例子:Ki=-2,Bi=10如果只有1个人买票,单张门票的价格为:Ki*1+Bi=8所以这1个人游玩该项目要花8元......
  • GAMES101笔记(03)
    前几个月忙着拯救地球所以有比较长时间的空档这次笔记对应的是games101内容的第六课,至于为什么跳过第五课因为第五课我感觉也没啥需要记笔记的,基本就是光栅化的一些基本概念以及最基本的一些实现理念,视频最后讲到了关于锯齿和走样的一些东西,第六课开头即紧接着这部分进行讲解采......
  • 记一次体验愉快的GameJam|上交复旦x72h极限游戏开发挑战赛
    太长不看版【上交复旦x72h极限游戏开发挑战赛作品《Colorful》宣传短片】 【腾讯×上交复旦72hgamejam极限游戏开发挑战赛作品《Colorful》全流程演示】 试玩demo下载链接:https://pan.baidu.com/s/1Xdksy97qF8Qac31H6nUGww 提取码:wmuq游戏简介:你说得对,但是《卡乐芙(col......
  • String Game 题解
    题目传送门一道二分题。\(|p|\le2\times10^6\),考虑\(O(n\logn)\)的算法,而又要输出最大值,不难想到二分答案。二分删除字母的数量,用一个数组将删掉的字母的下标存起来,然后判断删除字符后的\(t\)是否是\(p\)的子序列即可。Code#include<bits/stdc++.h>#definelllong......
  • [安洵杯 2019]game
    [安洵杯2019]game将文件放入IDA中打开,查看main()函数发现读取用户的输入,并存入v8这个变量当中,下面有两个关键函数check1()和check3()使用到了该变量,我们首先分析check1()发现有大量的循环,根据以往的经验,这是一种混淆手段,此题的程序流程不算复杂,可以跟着流程一步步分析经......
  • 2023年XCode升级GameCenter必读
    一、GameCenter功能介绍iOS中的GameCenter是Apple提供的游戏中心服务,它具有以下核心功能:玩家账号系统-提供玩家帐号系统,可以在不同游戏中使用统一的GameCenter账号。成就与排行榜-可以设置游戏内的成就系统,以及查看不同游戏的排行榜。多人对战-支持通过WiFi或......
  • Unity之 GameObject.Find()路径正确却找不到物体
    有一个需求,需要用代码找到一个GameObject并将其取消激活。我是这么写的:GameObject.Find("mainCanvas").SetActive(false);但你运行后就会发现它报错;而报错的内容是找不到物体。反复核实路径正确,且物体确实是激活状态后我对这个代码的报错感到很不解。直到我把代码改成了:v......
  • [GUET-CTF2019]number_game
    [GUET-CTF2019]number_game  打开题目,立刻定位关键函数for(i=0;i<=4;++i){for(j=0;j<=4;++j){for(k=j+1;k<=4;++k){if(*(&unk_601060+5*i+j)==*(&unk_601060+5*i+k))......