博客
关于我
B. Omkar and Infinity Clock
阅读量:150 次
发布时间:2019-02-27

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

为了解决这个问题,我们需要对给定的数组进行k次操作,每次操作包括将数组中的每个元素替换为当前最大值减去该元素。通过分析,我们发现数组会在两次操作后进入一个循环模式,因此我们可以利用这一特性来优化计算过程。

方法思路

  • 第一次操作:计算数组的最大值d,然后将每个元素替换为d减去该元素,得到新数组b。
  • 第二次操作:计算数组的最大值d,再次将每个元素替换为d减去该元素,得到新数组c。
  • 比较数组:检查数组b和c是否相同。如果相同,无论k的值如何,结果都是c。否则,根据k的奇偶性决定最终的数组状态:如果k是奇数,结果为b;如果是偶数,结果为c。
  • 这种方法避免了在k次操作中重复计算,能够在O(n)时间内解决问题,适用于大范围的n和k。

    解决代码

    #include 
    using namespace std;int main() { int t; cin >> t; for (int test_case = 0; test_case < t; ++test_case) { int n, k; cin >> n >> k; ll a[n]; for (int i = 0; i < n; ++i) { cin >> a[i]; } // 第一次操作得到数组b ll d = max(a); ll b[n]; for (int i = 0; i < n; ++i) { b[i] = d - a[i]; } // 第二次操作得到数组c ll d2 = max(b); ll c[n]; for (int i = 0; i < n; ++i) { c[i] = d2 - b[i]; } // 判断b和c是否相同 bool isSame = true; for (int i = 0; i < n; ++i) { if (b[i] != c[i]) { isSame = false; break; } } if (isSame) { for (int i = 0; i < n; ++i) { cout << c[i] << " "; } } else { if (k % 2 == 1) { for (int i = 0; i < n; ++i) { cout << b[i] << " "; } } else { for (int i = 0; i < n; ++i) { cout << c[i] << " "; } } } cout << endl; }}

    代码解释

  • 读取输入:读取测试用例的数量t,然后逐个处理每个测试用例。
  • 第一次操作:计算数组的最大值d,然后生成数组b。
  • 第二次操作:计算数组b的最大值d2,生成数组c。
  • 比较数组:检查b和c是否相同。如果相同,输出c;否则,根据k的奇偶性输出b或c。
  • 输出结果:根据判断结果输出最终数组。
  • 这种方法确保了在处理大范围数据时的效率和正确性。

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

    你可能感兴趣的文章
    openSUSE推出独立 GUI 包管理工具:YQPkg,简化了整个软件包管理流程
    查看>>
    OpenVP共用账号 一个账号多台电脑登录
    查看>>
    OpenVSwtich(OVS)Vlan间路由实战 附实验环境
    查看>>
    Openwrt LuCI模块练习详细步骤
    查看>>
    openwrt_git_pull命令提示merger冲突时如何解决?
    查看>>
    OpenWrt包管理软件opkg的使用(极路由)
    查看>>
    OpenWrt固件编译刷机完全总结
    查看>>
    Open××× for Linux搭建之二
    查看>>
    Open×××有线网络时使用正常,无线网络时使用报错的解决方案
    查看>>
    Opera Mobile Classic Emulator
    查看>>
    Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
    查看>>
    OperationResult
    查看>>
    Operations Manager 2007 R2系列之仪表板(多)视图
    查看>>
    operator new and delete
    查看>>
    operator new 与 operator delete
    查看>>
    operator() error
    查看>>
    OPPO K3在哪里打开USB调试模式的完美方法
    查看>>
    oppo后端16连问
    查看>>
    OPPO软件商店APP侵权投诉流程
    查看>>
    Optional用法与争议点
    查看>>