AtCoder AIsing Programming Contest 2020 D - Anything Goes to Zero (二进制,模拟)

- 题意:给你一个长度为\(n\)的\(01\)串,从高位到低位遍历,对该位取反,用得到的十进制数\(mod\)所有位上\(1\)的个数,不断循环直到为\(0\),输出每次遍历时循环的次数. 
- 题解:根据题意,我们可以直接模拟来写,但是所给数据范围会TLE,我们先记所有\(1\)的个数为\(sum\),当取模时,我们要么取\(sum+1\),要么取\(sum-1\).然后我们要算出字符串对应的十进制数,而因为数据过大,我们要取模,这里我们算两种取模情况下的总值(\(sum+1\)和\(sum-1\)),然后再算某一位对应十进制的值(同样两种情况),用两个数组存下来,最后遍历的时候,我们直接暴力算:总值\(\pm\)(某一位)%(\(sum \pm 1\)). 
- 代码: - int n;
 int sum;
 int add[N],sub[N];
 int val_add,val_sub;
 int ans;
 string s; int fpow(int x){
 int res=0;
 while(x){
 res++;
 x%=__builtin_popcount(x);
 }
 return res;
 } int main() {
 ios::sync_with_stdio(false);cin.tie(0);
 cin>>n>>s;
 for(int i=0;i<n;++i){
 if(s[i]=='1') sum++;
 }
 add[n-1]=1,sub[n-1]=1;
 for(int i=n-2;i>=0;--i){
 if(sum!=1) sub[i]=2*sub[i+1]%(sum-1);
 add[i]=2*add[i+1]%(sum+1);
 } for(int i=n-1;i>=0;--i){
 if(s[i]=='1'){
 if(sum!=1) val_sub=(val_sub+sub[i])%(sum-1);
 val_add=(val_add+add[i])%(sum+1);
 }
 } for(int i=0;i<n;++i){
 if(s[i]=='1'){
 if(sum==1){
 cout<<0<<endl;
 continue;
 }
 ans=(val_sub-sub[i])%(sum-1)+(sum-1);
 ans%=(sum-1);
 cout<<fpow(ans)+1<<endl;
 }
 else{
 ans=(val_add+add[i])%(sum+1)+sum+1;
 ans%=(sum+1);
 cout<<fpow(ans)+1<<endl;
 }
 } return 0;
 }
 
AtCoder AIsing Programming Contest 2020 D - Anything Goes to Zero (二进制,模拟)的更多相关文章
- AtCoder AISing Programming Contest 2019 Task D. Nearest Card Game
		题目分析在代码注释里. int main() { #if defined LOCAL && !defined DUIPAI ifstream in("main.in" ... 
- atcoder Keyence Programming Contest 2020 题解
		比赛地址 A 题意:给一个\(n*m\)的初始为白色的矩阵,一次操作可以将一行或一列染成 黑色,问至少染出\(k\)个黑点的最少操作次数. \(n\),\(m\)<=100,\(k\)<= ... 
- Atcoder Panasonic Programming Contest 2020
		前三题随便写,D题是一道dfs的水题,但当时没有找到规律,直接卡到结束 A - Kth Term / Time Limit: 2 sec / Memory Limit: 1024 MB Score ... 
- M-SOLUTIONS Programming Contest 2020 题解
		M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ... 
- [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)
		[AtCoder] NIKKEI Programming Contest 2019 本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ... 
- [AtCoder] Yahoo Programming Contest 2019
		[AtCoder] Yahoo Programming Contest 2019 很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ... 
- 【AtCoder】AISing Programming Contest 2019
		本来以为是1199rated的..仔细一看发现是1999,所以就做了一下 这场涨分很轻松啊...为啥又没打 等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~) 但是其实我思 ... 
- AtCoder NIKKEI Programming Contest 2019  C. Different Strokes (贪心)
		题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ... 
- AtCoder Dwango Programming Contest V E
		题目链接:https://dwacon5th-prelims.contest.atcoder.jp/tasks/dwacon5th_prelims_e 题目描述: 给定一个大小为\(N\)的数组\(A ... 
随机推荐
- (二)数据源处理4-excel部分封装及数据转换
			excel02.py # -*- coding: utf-8 -*-#@File :excel_oper_02.py#@Auth : wwd#@Time : 2020/12/7 8:16 下午impo ... 
- ctfhub技能树—文件上传—双写后缀
			双写后缀绕过 用于只将文件后缀名,例如"php"字符串过滤的场合: 例如:上传时将Burpsuite截获的数据包中文件名[evil.php]改为[evil.pphphp],那么过滤 ... 
- 推荐几个学习Python的免费网站
			想要学好Python,只靠看Python相关的书籍是远远不够的!今天为大家分享几个实用的Python学习网站. 欢迎各位热爱Python的小伙伴进群交流:610380249群里有大佬哦,而且很热心,群 ... 
- Linq.Expressions扩展ExpressionExtension
			手上有一个以前项目用到的.NET工具类封装的DLL. 正好又想试一下动态LAMBDA表达式,用.NET Reflector看一下源码. public static class ExpressionEx ... 
- 今天聊点干货—关于CSS样式来源
			样式来源 CSS样式共有5个来源,它们分别是\(\color{#FF3030}{浏览器默认样式}\).\(\color{#FF3030}{用户样式}\).\(\color{#FF3030}{链接样式} ... 
- Soul 网关 Nacos 数据同步源码解析
			学习目标: 学习Soul 网关 Nacos 数据同步源码解析 学习内容: 环境配置 Soul 网关 Nacos 数据同步基本概念 源码分析 学习时间:2020年1月28号 早7点 学习产出: 环境配置 ... 
- Java int和integer有什么区别 (mybatis踩坑)
			不要在实体类中使用int 我们都知道Integer是int的包装类,而int是基本数据类型.所以Integer类型的变量会初始化为null,int类型则会被初始化为0 . 所以在下面的动态拼接例子中: ... 
- 我教你如何解决 Docker 下载 mcr.microsoft.com 镜像慢的办法
			我教你如何解决 Docker 下载 mcr.microsoft.com 镜像慢的办法 一.介绍 最近,我在写有关使用 Jenkins 搭建企业级持续集成环境的文章,准备了四台服务器,企业级别嘛,一台就 ... 
- linux系统层面调优
			linux系统层面调优和常见的面试题 - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1664287 
- Obligations for calling close() on the iterable returned by a WSGI application
			Graham Dumpleton: Obligations for calling close() on the iterable returned by a WSGI application. ht ... 
