首页 > 其他分享 >ABC347 C~D~?(更新中)

ABC347 C~D~?(更新中)

时间:2024-04-01 22:22:54浏览次数:34  
标签:No int popcount 更新 60 休息日 ABC347 cases

Portal:https://atcoder.jp/contests/abc347/tasks

ABC347只过了\(A,B\),再创新低,。。。遂来补题

C - Ideal Holidays

题意简述

输入\(n,a,b,d_1,d_2,…,d_n\),表示在Atcoder国每周分为\(a\)天休息日和\(b\)天工作日,现在有\(n\)个事件,第\(i\)个事件落在第\(d_i\)日。我忘了今天是这一周的第几天,需要你输出这\(n\)个事件是否有可能全部落在休息日。

分析

一开始是对\(n\)个日期取模\(a+b\)然后再求极差\(k\),如果\(k<a\)就Yes,否则No……

然后就\(WA\)了一个点。见下:

2 5 1
5 6

\(2\)个事件:\(\{5,6\}\),\(5\)天休息日,\(1\)天工作日。本应输出Yes,但是输出了No。这是因为对\(5\)和\(6\)取模\(6\)分别得\(5\)和\(0\),所以只判断极差是不行的。应该把所有\(d[i]\)取模后的结果存在\(d\)中,从小到大排序,然后把两个日期之间的天数(包括\(d[1]+a+b-d[n]\))求最大值。因为\(d[i]\)取值范围是\([0,a+b)\),所以如果两个天数之间差距\(\geq b\)(工作日的天数),就说明这些日期都能安排在休息日。

Code

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b,d[200010];
int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		cin>>d[i];
		d[i]%=(a+b);
	}
	sort(d+1,d+1+n);
	int maxx=INT_MIN;
	for(int i=2;i<=n;i++){
		maxx=max(maxx,d[i]-d[i-1]-1);
	}
	maxx=max(maxx,d[1]+a+b-d[n]-1);
	if(maxx>=b) cout<<"Yes\n";
	else cout<<"No\n";
}

D - Popcount and XOR

题意简述

给你非负整数\(a,b,C\),构造出非负整数\(X,Y\)满足下列条件:

  • \(0 \leq X < 2^{60}\)
  • \(0 \leq Y < 2^{60}\)
  • \(\operatorname{popcount}(X) = a\)
  • \(\operatorname{popcount}(Y) = b\)
  • \(X \oplus Y = C\)

\(popcount(X)\)表示\(X\)二进制表示中\(1\)的个数。
\(\oplus\)表示按位异或。

分析

这个题难度其实并不高,但因为赛时跟C鏖战太久并且吃了\(4\)次罚时还没\(A\),所以思路乱了。第二天一想就出来了。

设\(k\)为\(C\)中\(1\)的个数,\(x,y\)分别为\(X,Y\)中,放在\(C\)值为\(1\)的位置上的\(1\)的个数。则有下列关于\(x,y\)的方程组:

\(\begin{cases} a-x=b-y\\ x+y=k \end{cases}\)

则有\(\begin{cases} x=\frac{a-b+k}{2}\\ y=k-x \end{cases}\)

那么我们总结了部分输出No的情况:

  • \((a-b+k)\ mod\ 2\neq 0\)(注意负数\(mod\ 2\)可能等于\(-1\));
  • \(x<0,y<0,x\geq a或y\geq b\)。

根据目前的结果,我们可以进行构造了,\(0\leq i<60\),\(cnt0\)和\(cnt1\)分别表示到目前\(s[i]=0和1\)的个数。详见代码。

需要注意的是还有一种输出No的情况,也就是构造完,\(a\)个\(1\)或者\(b\)个\(1\)没有用完。比如\(a=60,b=60,c=2^{60}-1\),不会被前面的步骤筛查出来,但是发现\(X\)和\(Y\)中一共只能用\(60\)个\(1\),\(a\)和\(b\)没有用完。所以需要定义\(cnt\)来记录填了多少\(1\),每构造完一个就判断如果\(cnt<a\)(如果构造的是\(Y\)就判断\(cnt<b\))就输出No

Code

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c;
signed main(){
	cin>>a>>b>>c;
	bitset<70> s(c),A,B;
	int k=s.count();
	int dx=a-b+k;
	if(dx%2!=0){
		cout<<"-1\n";
		return 0;
	}
	int x=dx/2,y=k-x;
	if(x<0||y<0||x>a||y>b){
		cout<<"-1\n";
		return 0;
	}
	int cnt=0;
	for(int i=0,cnt0=0,cnt1=0;i<60;i++){
		if(s[i]==0){
			if(cnt0<a-x) A[i]=1,cnt++;
			cnt0++;
		}else{
			if(cnt1<x) A[i]=1,cnt++;
			cnt1++;
		}
	}
	if(cnt<a){
		cout<<"-1\n";
		return 0;
	}
	cnt=0;
	for(int i=0,cnt0=0,cnt1=0;i<60;i++){
		if(s[i]==0){
			if(cnt0<b-y) B[i]=1,cnt++;
			cnt0++;
		}else{
			if(cnt1>=x) B[i]=1,cnt++;
			cnt1++;
		}
	}
	if(cnt<b){
		cout<<"-1\n";
		return 0;
	}
	cout<<A.to_ullong()<<" "<<B.to_ullong()<<"\n";
	return 0;
}

\([To\ be\ continued?]\)

不行太菜了,必须多练了

标签:No,int,popcount,更新,60,休息日,ABC347,cases
From: https://www.cnblogs.com/Sinktank/p/18107293

相关文章

  • YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![
    ​专栏介绍:YOLOv9改进系列|包含深度学习最新创新,助力高效涨点!!!专栏介绍    YOLOv9作为最新的YOLO系列模型,对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型,使用当前流行和较新的模块进行改进。本专栏于2024年2月29日晚创建,预计四......
  • YOLOv9改进项目|关于上周更新计划的说明24/4/1
     专栏地址:目前售价售价69.9,改进点50+专栏介绍:YOLOv9改进系列|包含深度学习最新创新,助力高效涨点!!!本周已更新说明:###⭐⭐更新时间:2024/3/30⭐⭐        1.yolov9-LSK-C2f.yaml:使用ICCV2023中的选择性注意力LSK与C2f融合        2.yolov9-LSK-C3.y......
  • 亿级地址关联匹配如何实现每天全量更新?大数据环境下hive+addresstool解决方案
    在政务系统中有许多需要将业务地址关联到标准地址的场景,addresstool致力于解决地址关联匹配算法中的速度和准确性问题。最近遇到一个业务痛点,由于客户标准地址在持续更新,导致历史上业务地址关联到的标准地址无法与最新的标准地址挂接,于是客户要求每日对全量业务地址进行挂接标准......
  • Python的opencv库的函数合集(持续更新中)
    为自己也为别人,整合opencv的函数,欢迎纠错!目录1.imread()2.cv2.imshow()1.imread()介绍:cv2.imread()是OpenCV库中的一个函数,专门用于读取图片文件并将其转换为NumPy数组。此函数对于图像处理和计算机视觉应用非常有用,因为它提供了读取图片到程序中的基本能力。格式:参数......
  • Java从萌新小白到顶级大牛(4更新中)
    自定义异常Java标准库定义的常用异常包括:Exception│├─RuntimeException│ ││ ├─NullPointerException│ ││ ├─IndexOutOfBoundsException│ ││ ├─SecurityException│ ││ └─IllegalArgumentException│    ││ ......
  • ABC347F 题解
    我们考虑这三个正方形的相对位置有多少种情况。我们把正方形的顶点设为\((x_i,y_i)\)。容易发现,放置合法当且仅当\(\foralli\neqj,|\x_i-x_j\|\geqd\\text{or}|\y_i-y_j\|\geqd\)。发现这只有可能是以下两种情况。于是便可以开始写了。/***********......
  • [ABC347] AtCoder Beginner Contest 347 题解
    [ABC347]AtCoderBeginnerContest347题解A模拟。BSA模板,把所有子串丢进哈希表里即可。C逆天题,这个分讨并不显然。考虑计算所有天数到今天的偏移量,然后如果最远的和最近的天数的距离\(\leA\)肯定可以,否则可以把所有天向右平移一段距离,然后使得最远的天到达第二周的......
  • openGL学习笔记(更新ing)
    本文章暂不介绍GLFW以及GL_GLAD的配置方法。学习赵新政初识openGL #include<iostream>#include"glad/glad.h"#include<GLFW/glfw3.h>//以上是配置好的glad以及glfw需注意glad需要在glfw上面接下来看看GLFW官网提供的ExampleCode#include<GLFW/glfw3.h>intmai......
  • 前后端问题整理 持续更新 附赠Vite+Vue3+Ts项目配置
    问题整理(Vite,Vue(1-3)|.NET)持续更新目录问题整理(Vite,Vue(1-3)|.NET)持续更新前端@项目配置1.node版本过高问题安装nvm管理node版本2.镜像证书无效问题3.npm版本问题4.npminstall证书过期问题5.yarn命令无法使用问题6.ViteVue项目搭建npmrundev错误nod......
  • [ABC347C] Ideal Holidays题解
    [ABC347C]IdealHolidays题解原题传送门原题传送门(洛谷)​ 题意翻译:​ 在\(AtCoder\)王国中,一个周有\(A+B\)天。其中在一周中,\([1,A]\)天是假日,\([A+1,B]\)天是工作日。​ 高桥有\(N\)个计划,第\(i\)个计划安排在\(i\)天后。他不知道今天是周几,但他想知道是否......