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

    你可能感兴趣的文章
    Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
    查看>>
    Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>