博客
关于我
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 Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
mutiplemap 总结
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
Mysql Innodb 锁机制
查看>>