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

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

A - Number of Multiples

水题

B - An Odd Problem

水题

C - XYZ Triplets

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

D - Anything Goes to Zero

这道题思路很妙:

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

  • 当 cnt > 1 时:

    对每一位的变化,模数要么为 cnt - 1,要么为 cnt + 1。我们可以先按原字符串计算这两种情况,然后在每一位上进行加减。对于 0 位,只需要加上 2^k 再对 cnt + 1 取模。对于 1 位,只需要减去 2^k(注意负数取模)再对 cnt + 1 取模。

  • 当 cnt = 1 时:

    只有一个 1,模数只能是 cnt + 1。对于 0 位,直接输出 0 即可。

  • 当 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;}

    解释

  • 快速幂函数:用于计算大数的幂模运算,避免数值溢出。
  • 计数1的数量:遍历字符串,统计1的数量cnt。
  • 分情况处理:根据cnt的值,选择不同的计算方式。
  • 计算每个位置的结果:根据字符是0还是1,分别计算并输出结果。
  • 通过这种方法,可以高效地解决字符串变换问题,并确保结果正确。

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

    你可能感兴趣的文章
    python中类的实例化_python类的实例化
    查看>>
    Python中类的约束
    查看>>
    python中自定义sort 规则
    查看>>
    python中自定义错误_在现代Python中声明自定义异常的正确方法?
    查看>>
    python中获取上一个月一号的方法
    查看>>
    python中蜂窝网格边缘的坐标
    查看>>
    Python中表示偶数_分享一组 Python 高效编程的实用技巧
    查看>>
    Python中赋值,深拷贝和浅拷贝
    查看>>
    python中输出字符串的和数字的几种方式
    查看>>
    Python中进行特征重要性分析的9个常用方法
    查看>>
    Python中通过MyQR生成gif动图二维码
    查看>>
    Python中通过PyPDF2实现PDF加密
    查看>>
    Python中通过PyPDF2实现PDF合并
    查看>>
    Python中通过PyPDF2实现PDF拆分
    查看>>
    Python中通过PyPDF2实现PDF添加水印
    查看>>