博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现对图像进行色调处理算法(附完整源码)
    查看>>
    Objective-C实现对称矩阵压缩存储(附完整源码)
    查看>>
    Objective-C实现寻找欧拉路径/回路(附完整源码)
    查看>>
    Objective-C实现导弹跟踪算法(附完整源码)
    查看>>
    Objective-C实现将 base64 字符串转换为字节数组算法(附完整源码)
    查看>>
    Objective-C实现将位转换为浮点数bitsToFloat算法(附完整源码)
    查看>>
    Objective-C实现将列表向右旋转 k 个位置算法(附完整源码)
    查看>>
    Objective-C实现将字符串中大写字母转换为小写字母(附完整源码)
    查看>>
    Objective-C实现将字符串从一个基转换为另一个基算法(附完整源码)
    查看>>
    Objective-C实现将字节数组转换为 base64 编码算法(附完整源码)
    查看>>
    Objective-C实现将彩色图像转换为负片算法(附完整源码)
    查看>>
    Objective-C实现将无符号整数n变成成d进制表示的字符串s(附完整源码)
    查看>>
    Objective-C实现将给定的 utf-8 字符串编码为 base-16算法(附完整源码)
    查看>>
    Objective-C实现将给定的字符串编码为 base32算法(附完整源码)
    查看>>
    Objective-C实现小根堆(附完整源码)
    查看>>
    Objective-C实现局域网双向通信(附完整源码)
    查看>>
    Objective-C实现局部最大值点数算法(附完整源码)
    查看>>
    Objective-C实现屏幕捕获功能( 附完整源码)
    查看>>
    Objective-C实现峰值信噪比算法(附完整源码)
    查看>>
    Objective-C实现已线段的形式求曲线长算法(附完整源码)
    查看>>