博客
关于我
AIsing Programming Contest 2020 游记 (ABC水题,D思维)
阅读量:411 次
发布时间:2019-03-06

本文共 2013 字,大约阅读时间需要 6 分钟。

补题链接:

A - Number of Multiples

水题

B - An Odd Problem

水题

C - XYZ Triplets

水题,注意数组不要开小了

D - Anything Goes to Zero

这道题思路很妙:

首先计算出字符串中所有 \(1\) 的数量 \(cnt\) ,然后分三种情况:

  1. \(cnt > 1\) 此时我们不难发现对每一位的变化,模数要么为 \(cnt - 1\),要么为 \(cnt + 1\) ,那么我们就可以先按原字符串把两种情况先算出,在计算每一位时进行加减即可,对 \(0\) 位,只需要加上 \(2^k\) 再对 \(cnt + 1\) 再对 \(1\) 位,只需要减去 \(2^k\) (注意负数取模)再对 \(cnt + 1\) (注意负数取模)再对 \(k\) 为下标。
  2. \(cnt = 1\) 此时不难发现就一个 \(1\) ,那么模数就只能为 \(cnt + 1\) ,也即 \(0\) 位的变化和计算和上面一样,但对 \(1\) 位的变化和计算和上面一样,但对 \(0\) ,直接输出 \(0\) 即可
  3. \(cnt = 0\) 最简单的一种情况,全部输出 \(1\) 即可
#include 
using namespace std;typedef long long ll;ll power(ll a, ll b, ll mod) { return b ? power(a * a % mod, b / 2, mod) * (b % 2 ? a : 1) % mod : 1; }ll cal(ll n) { ll cnt = 1; while (n) { n = n % __builtin_popcount(n); cnt++; } return cnt;}int main() { ll n, cnt = 0, ans1 = 0, ans2 = 0, ans; string s; cin >> n >> s; for (int i = 0; i < n; i++) { if (s[i] == '1') cnt++; } if (cnt > 1) { for (ll i = 0; i < n; i++) { if (s[i] == '1') ans1 = (ans1 + power(2, n - i - 1, cnt - 1)) % (cnt - 1), ans2 = (ans2 + power(2, n - i - 1, cnt + 1)) % (cnt + 1); } for (ll i = 0; i < n; i++) { if (s[i] == '0') { ans = (ans2 + power(2, n - i - 1, cnt + 1)) % (cnt + 1); cout << cal(ans) << endl; } else { ans = (ans1 + ((cnt - 1) - power(2, n - i - 1, cnt - 1) % (cnt - 1)) % (cnt - 1)) % (cnt - 1); cout << cal(ans) << endl; } } } else if (cnt == 1) { for (int i = 0; i < n; i++) if (s[i] == '1') ans2 = (ans2 + power(2, n - i - 1, cnt + 1)) % (cnt + 1); for (ll i = 0; i < n; i++) { if (s[i] == '0') { ans = (ans2 + power(2, n - i - 1, cnt + 1)) % (cnt + 1); cout << cal(ans) << endl; } else { cout << 0 << endl; } } } else for (int i = 0; i < n; i++) cout << 1 << endl; return 0;}

转载地址:http://aaykz.baihongyu.com/

你可能感兴趣的文章
MySQL设置远程连接
查看>>
MySQL详解:索引的介绍和原理分析
查看>>
MYSQL语句。
查看>>
MySQL调大sort_buffer_size,并发量一大,查询排序为啥又会变慢
查看>>
Mysql账号权限查询(grants)
查看>>
MYSQL输入密码后闪退的解决方法
查看>>
MySQL迁移到达梦:如何轻松、高质量完成迁移任务
查看>>
mysql返回的时间和实际数据存储的时间有误差(java+mysql)
查看>>
mysql还有哪些自带的函数呢?别到处找了,看这个就够了。
查看>>
Mysql进入数据库
查看>>
mysql进阶 with-as 性能调优
查看>>
mysql进阶-查询优化-慢查询日志
查看>>
wargame narnia writeup
查看>>
MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)
查看>>
Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
查看>>
Mysql连接时报时区错误
查看>>
mysql逗号分隔的字符串如何搜索
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
mysql部署错误
查看>>