「杂题乱刷2」CF1360H

news/2024/9/12 23:22:18/文章来源:https://www.cnblogs.com/wangmarui/p/18378568

题目链接

CF1360H

解题思路

发现你可以十分高效的统计小于等于 \(x\) 的合法的数字数量。

并且你可以发现,当 \(x\) 递增时,合法的数字数量是不递减的,因此合法的数字数量是具有单调性的。

于是可以进行二分答案。

那么如何进行 check 呢?我们先将不可选用的二进制数字给转化成数字,然后假设我们是找小于 \(x\) 可选用的数字数量,直接用 \(x + 1\) 再减去小于等于 \(x\) 的不可选用的数字数量即可。

因此单次 check 根据是 \(O(n)\) 的。

总时间复杂度为 \(O(n \log 2^m)\),非常优秀。

注意输出的时候需要带前导零补齐输出。

参考代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
//#define map unordered_map
#define re register
#define ll long long
#define forl(i,a,b) for(re ll i=a;i<=b;i++)
#define forr(i,a,b) for(re ll i=a;i>=b;i--)
#define forll(i,a,b,c) for(re ll i=a;i<=b;i+=c)
#define forrr(i,a,b,c) for(re ll i=a;i>=b;i-=c)
#define pii pair<ll,ll>
#define mid ((l+r)>>1)
#define lowbit(x) (x&-x)
#define pb push_back
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
ll _t_;
void _clear(){}
ll L,R;
ll n,m;
ll a[110];
string s;
ll pw(ll x){return 1ll<<x;
}
ll f(string s)
{ll k=0,sum=0;reverse(s.begin(),s.end());for(auto i:s)sum+=pw(k++)*(i=='1');return sum;
}
bool check(ll x)
{ll sum=x+1; // 注意 0 forl(i,1,n)if(a[i]<=x)sum--;
///	if(x==4)
//		cout<<"???"<<sum<<endl;return sum<((pw(m)-n+1)/2);
}
void print(ll x)
{if(x==0){forl(i,1,m)cout<<0;cout<<endl;return ;}string s="";while(x)s+=x%2+'0',x/=2;ll sz=s.size();forl(i,1,m-sz)s+='0';reverse(s.begin(),s.end());cout<<s<<endl;
}
void solve()
{_clear();cin>>n>>m;L=0,R=pw(m)-1;forl(i,1,n)cin>>s,a[i]=f(s);sort(a+1,a+1+n);while(L<R){ll Mid=(L+R)/2;if(check(Mid))L=Mid+1;elseR=Mid;}print(L);
//	cout<<L<<endl;
}
int main()
{IOS;_t_=1;cin>>_t_;while(_t_--)solve();QwQ;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786813.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

985计算机院倒数第一某废物的自述

985计算机院倒数第一某废物的自述 严格来说是某双一流,但无所谓了我我来自某发展一般的小县城,但好在家境还算**中等** 我高中成绩一直一般,但好在高三小镇做题家buff生效,在高考中超常发挥,上了一所想都没想过的某双一流 我选择专业时奉承母令,选择了计算机专业,也算是…

CLRCore

1.CLR:公共语言运行时,就是IL(中间语言)的运行环境;安装.net Framewrok的时会安装CLR 2.堆栈内存分配: CLR进行内存的分配 值类型分配在栈中,变量和值都是在线程栈中(结构体是输出值类型,结构体默认继承system.valuetype,所以不能继承其他类了,结构体不能有无参构造函…

CSP-S 2024 游记

壹 我有一个朋友叫小 W ,他最近有点闷。 我问他为什么闷,他跟我说他根本就没准备初赛。 我说你这么牛,连初赛都不用准备。 他说,他在梦中见到了 ddz ,他问 ddz 没准备初赛怎么办, ddz 给他的答复是:不是,哥们。你都免初赛了还问我干啥啊。 贰 我喜欢月光。 空空,不可控…

别样的ABC大战

前言:BYD ABC 大战。此事发生于2024年3月,为保护隐私(有的人应该能看出来哈哈),人物名字均使用字母代替。故事虽根据真实事件改编,但较为夸张。 一天,W老师给我发来微信。她说:“你敢不敢和其他人举行ABC大战?”我豪爽的答应了:“我当然敢!”周六下午在花园路XX号举…

【NextJS】中间件实战介绍

原创 洞窝技术使用 Next.js 中间件实现高性能个性化 在当今的数字时代,用户期望获得量身定制的在线体验。个性化已经从一个奢侈品变成了必需品,尤其是对于希望在竞争激烈的市场中脱颖而出的企业来说。然而,实现高性能的个性化往往是一个挑战,需要在用户体验和系统性能之间取得…

排列组合问题

排列公式 从 \(n\) 个数中选出 \(m\) 个数并且排序。 公式推导: \[ A^2_3 = 3 \times 2 = 6\\3_6 = 6 \times 5 \times 4 = 120\\ A^2_6 = 6 \times 5 = 30\\ \therefore A^m_n = n(n-1)(n-2)\dots (n-m+1)\\ 又\because n!=n\times (n-1)\times (n-2) \dots \times 2\times…

Docker简介及安装

本系列将会与大家分享 Docker 的相关知识。本章主要简要介绍 Docker,并指导大家如何在 CentOS 7 上进行 Docker 的安装。本系列将会与大家分享 Docker 的相关知识。本章主要简要介绍 Docker,并指导大家如何在 CentOS 7 上进行 Docker 的安装。废话不多说,下面我们直接进入主…

C程序设计语言(第2版新版)练习题1-9

练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。#include <stdio.h>int main(int argc, char *argv[]) {(void)argc;(void)argv;int c;int c_last = \0;while((c = getchar()) != EOF) {if (( != c) || ( != c_last)) {putchar(c);}c…

C# .NET CORE 知识点总结【基础篇】

心之所向,勇往直前!记录面试中的那些小事。面试题只是一道门,最好还是走进屋里看看。正文 结语本篇到此结束,如果有任何疑问或者指正,请发表在评论区。