zoukankan      html  css  js  c++  java
  • CodeCraft-20 (Div. 2)B. String Modification

    http://codeforces.com/contest/1316/problem/B 题目链接

    这题如果用纯模拟的方法做一定是会超时的,所以考虑用不那么暴力的方法,加入一点小技巧

    容易看出,题目中当k=2时,其实就是用冒泡法发第一个字母移到最后一位。

    那么只需要将首字母放到最后就可以了。

    那么问题来了 当k>2时的情况呢?

    只需要将前k-1位看成一个整体就行了,此时就又变成了k=2的情况,将前k-1位放到了最后;

    但是要注意,当k和n不同时,看成整体的字符串内部也可能发生多次变化。但是总体只有保持不变和反转两种情况。

    让我们观察 n=6,k=4 时对abcdef 中被看成整体的abc的操作过程 

    1.abc->bca

    2.cba->abc

    3.abc->cba

    可见,这种情况下要对abc进行反转。那么只需要在n-k是偶数的时候进行反转即可。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define ll long long
     5 #define ar array
     6 
     7 int main() {
     8     ios::sync_with_stdio(0);
     9     cin.tie(0);
    10 
    11     int t;
    12     cin >> t;
    13     while(t--) {
    14         int n;
    15         string s;
    16         cin >> n >> s;
    17         pair<string, int> ans=make_pair(s, 1);
    18         for(int i=2; i<=n; ++i) {
    19             string t=s.substr(i-1), u=s.substr(0, i-1);
    20             cout<<"t  "<<t<<endl<<"u  "<<u<<endl; 
    21             if((n-(i-1))%2==1)
    22                 reverse(u.begin(), u.end());
    23             ans=min(make_pair(t+u, i), ans);
    24             cout<<t+u<<endl;
    25         }
    26         cout << ans.first << "
    " << ans.second << "
    ";
    27     }
    28 }
    rush!
  • 相关阅读:
    apache虚拟主机三种不同配置方式
    搭建http服务器及配置
    学校ftp服务器搭建
    vsftpd搭建使用
    nginx使用
    pxe+kickafkstart (二)转
    pxe批量网络装机
    bash中()使用特性
    ansible使用
    javascript 之 Object.defineProperty
  • 原文地址:https://www.cnblogs.com/LH2000/p/12419907.html
Copyright © 2011-2022 走看看