zoukankan      html  css  js  c++  java
  • 暴力swap导致TLE问题解决办法

    B. Pasha and String

    题目很简单,就是将字符串中从某一位置到另一位置之间的片段逆序,基本思路就是利用swap两两交换。这时候题目会出现问题就是超时Time limit exceeded ,两两交换太过于耗费时间,原因在于中间有交换过去又交换回来相当于没做改变的交换浪费了时间,有没有更好的办法呢?因为颠倒的都是中间的数,所以可以统计片段中每个字母颠倒的次数,若为奇数次则交换;偶数次则不交换。还有一个地方注意,因为题目当中提示了,每次的ai小于等于二分之一倍的字符串的长度,所以统计颠倒次数的时候循环变量到达字符串长度的一半即可。因为是片段,片段中间的字符都要颠倒,所以有a[i] += a[i - 1],之前也有过类似的统计方法,应该学会。

     1 #include<iostream>
     2 #include <string>
     3 using namespace std;
     4 int a[100005];
     5 int main() 
     6 {
     7     string s;
     8     cin >> s;
     9     int len = s.size();
    10     int m;
    11     cin >> m;
    12     for (int i = 0; i < m; i++) 
    13     {
    14         int t;
    15         cin >> t;
    16         a[t]++;
    17     }
    18     for (int i = 1; i <= len / 2; i++) 
    19         a[i] += a[i - 1];
    20     for (int i = 0; i <= len / 2; i++) 
    21     if (a[i] & 1) 
    22         swap(s[i-1], s[len - i]);
    23     cout << s << endl;
    24     return 0;
    25 }

      

      

  • 相关阅读:
    Redis 和 Memcached 的区别
    缓存详解
    HTTP常见状态码
    ORM的概念, ORM到底是什么
    remote: Unauthorized fatal: Authentication failed for...
    TR、FN、FP、FN
    <笔记>ue破解
    <笔记>bmp图片数据格式
    三轴加速度数据处理
    智能手环+三轴加速度传感器总结
  • 原文地址:https://www.cnblogs.com/jzwong/p/4413700.html
Copyright © 2011-2022 走看看