首页 > 其他分享 >2024-04-05

2024-04-05

时间:2024-04-05 21:55:49浏览次数:18  
标签:return 04 05 int top 2024 num false include

2024-04-05

magic

首先 \(n\) 肯定得是 \(R+B\) 的倍数

当 \(\tt R\) 和 \(\tt B\) 的数量除上输入的 \(R\) 和 \(B\) 的比值相同时有解

题解里面有特别神奇的归纳法证明

构造方法就是维护一个栈 栈顶的 \(R+B\) 个符合条件就存到答案里面

但是我在考场上就是想不出来咋做,别人都咋会的,不懂

是我写代码的习惯不好么为甚么别人不特判 0 挂 10 分我不特判就一分没有啊我真服

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;

const int N=1e5+10;

int n;
int R,B;
int rd,bl;

char s[N];

int ctt[N],top,stk[N];

vector<int> ans[N];
int num;

bool judge() {
	if(R==0&&B==0) return false;
	if(n%(R+B)!=0) return false;
	if((R==0&&rd!=0)||(B==0&&bl!=0)) return false;
	if(R==0||B==0) return true;
	if((rd%R!=0)||(bl%B!=0)) return false;
	if(rd/R!=bl/B) return false;
	return true;
}

int main() {
	freopen("magic.in","r",stdin);
	freopen("magic.out","w",stdout); 
	scanf("%d%d%d",&n,&R,&B);
	for(int i=1;i<=n;i++) {
		cin>>s[i];
		if(s[i]=='R') rd++;
		else bl++; 
	}
	if(!judge()) {
		puts("NO");
		return 0;
	}
	for(int i=1;i<=n;i++) {
		stk[++top]=i;
		ctt[top]=ctt[top-1];
		if(s[i]=='R') ctt[top]++;
		if(top>=R+B) {
			if(ctt[top]-ctt[top-B-R]==R) {
				num++;
				int tar=top-R-B;
				while(top>tar) {
					ans[num].push_back(stk[top]);
					top--;
				}
			}
		}
	}
	puts("YES");
	printf("%d\n",num);
	for(int i=num;i;i--) {
		for(int j=0;j<ans[i].size();j++) printf("%d ",ans[i][j]);
		puts("");
	}
	
	return 0;
}

key

模拟赛第二题

只需考虑重要度之和小于 \(m\) 的极大的子集,因为如果极大的子集都不能打开房门,那么重要度之和更小的集合由于钥匙更少,更不可能打开房门

存在一种方案使得答案就是这样的集合的个数
这种方案是:

所以答案就是满足这样的要求的集合的数量

  • 和小于 \(m\)
  • 加上不在这个集合内的最小的数之后大于等于 \(m\)
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

typedef long long ll;

const ll Inf=1e18;
const int N=25;

int n;
ll m,a[N],sm,mn;

int main() {
	freopen("key.in","r",stdin);
	freopen("key.out","w",stdout); 
	scanf("%d%lld",&n,&m);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sm+=a[i];
	if(sm<m) {
		puts("1");
		return 0;
	}
	int ans=0;
	for(int S=0;S<(1<<n)-1;S++) {
		sm=0,mn=Inf;
		for(int i=1;i<=n;i++) {
			if((S>>(i-1))&1) sm+=a[i];
			else mn=min(mn,a[i]);
		}
		if(sm<m&&sm+mn>=m) ans++;
	}
	printf("%d\n",ans);
	
	return 0;
}

标签:return,04,05,int,top,2024,num,false,include
From: https://www.cnblogs.com/Orange-Star/p/18116047

相关文章

  • 2024年4月5日-UE5-怪物被击中会停止移动,流星火雨,引导施法技能制作、随机数
    在角色总类的蓝图里,创建一个变量 然后在怪物总类这里,设置受到伤害则设置为被击中状态,先停止移动,然后播放动画完毕,取消被击中状态 然后行为树里也要修改,没有死亡,没有被击中状态才执行行为树,使用个OR命令 现在开始制作流星火雨技能效果在输入这里新建一个流星火雨 ......
  • YuanDaiMa2048博客文章总览
    YuanDaiMa2048博客文章总览不定期更新学习中遇到的问题以及学习笔记…一、基础概念最新流行IT技术正则化概念及使用正则表达式基本概念正则表达式与正则化[日常使用]Win+R[日常使用]Shell常用命令dos和cmd二、科研工具[实验室服务器使用]使用VSCode、PyCharm、Mo......
  • 2024.2.18 模拟赛
    A.小学数学20分暴力即可。40分将询问拆为\(\leqt\)减去\(<s(\leqs-1)\)的两个问题,然后将询问排序后做前缀和即可。满分要求强制在线,将矩阵中所有元素排序,然后分成\(\sqrt{nm}\)个块,每个块记录二维前缀和(出现了多少次块内的数)。每次询问时先处理整块,对于整块外的数再单......
  • 2024.1.23 模拟赛
    郊游首先需要快速找到当前适配度最大的一对小朋友。容易发现\(a,b\)的适配度即为\(a,b\)二进制下最长公共后缀的长度,于是先翻转所有数的二进制串并插入到Trie中。那么\(a,b\)的适配度即为\(a,b\)所代表叶子节点的\(\rmLCA\)(最近公共祖先)深度。若Trie中以\(x\)......
  • 2024.3.17 模拟赛
    A贸易题目保证输入的边\(u<v\),说明题目中的图是一个有向无环图\(DAG\),但是不一定连通。可以记录\(f[i]\)表示到达\(i\)之前能遇到的最小的价格,使用拓扑排序进行\(dp\)转移。对于每一个点\(i\),如果其价格为\(a[i]\),就可以用\(a[i]-f[i]\)更新答案,取最大值即......
  • 2024.2.25 模拟赛
    A按题意直接模拟即可。也就是每次取出一些字符,放入字符串\(P\)中。注意实现时的时间复杂度,不要写成\(O(n^2)\)的。#include<bits/stdc++.h>usingnamespacestd;chars[1000010],t[1000010];inthd1=1,hd2=1,n,m,x,y;charans[2000010];intmain(){ scanf("%s",s+1);n......
  • 第05章 Servlet和JSP应用
    Servlet与JSP很相似,但也有一些区别,我们重新说明一下:1.Servlet是一个Java类文件,JSP是一个混编Java的HTML的文件。2.Servlet使用方法来处理请求,JSP则使用内置对象来处理请求。3.Servlet需要编译才能运行,而JSP由JSPContainer管理,不需要编译。4.Servlet通过配置url访问,JSP......
  • 2024-04-05 闲话
    KlayThompsondidaverygojobattoday'sNBAregularseasonmatch.Anaudiencecommented"春风若有怜花意,可否许我再少年"onHuPuapp.Ithinkthequoteisveryfittingbecauseit'sspringnowinTianjin.Clustersofflowersarequiteattractiveto......
  • 4.5Codeforces Round 905 (Div. 3)
    C题题意:几个数字,挑选其中几个进行+1.得到的数字的乘积可以整除k注意题目条件:k只能是2,3,4,5这几种情况每个数字只能是1——10(不算大)(好像没啥用,因为可以自增超过10)思路:对于2,3,5要想整除,这些个数里必须要有一个数是可以整除2,3,5的。所以思路很简单,去造,找到一个“变成5的倍数”所需......
  • 微软发布整合了2024年3月更新的免费Windows 11虚拟机(WDE)
    下载虚拟机目前,我们将虚拟机打包为四种不同的虚拟化软件选项: VMWare、 Hyper-V(Gen2) 、 VirtualBox 和 Parallels。这些虚拟机包含 Windows的评估版本 ,该版本在发布日期到期。如果评估期过期,桌面背景将变为黑色,你将看到一条永久性桌面通知,指示系统不是正版,并且电脑......