zoukankan      html  css  js  c++  java
  • POJ-3078.Shuffle'm Up(简单模拟题)

      这道题做了有四个小时吧,今天一整天都处于边玩边学的状态,我很是不喜欢...一开始用了20分钟模拟,过了样例后TLE了,就在考虑是不是判断是否重复判定的数组开大了,结果一直蛙,后面想到了map判重,结果由于还没有将BUG改完,都只是能过样例,最后看了题解,发现由于我菜将一个判断条件的位置写错了位置......

      本次主要就是写教训的,感觉自己可能是已经麻木了就没有去仔细找BUG,知道错了...

      本题大意:给出两个长度为len的字符串s1, s2和一个长度为2 * len的字符串s12,每次先让s2先s1后先后依次取一个字符得到一个长度为2 * len 的字符串s,如果发现得到的字符串s与s12相等就输出交换的次数,否则让s的左半边等于s1右半边等于s2再进行上面的变换,如果无法使的变换后的s == s12则输出-1。

      本题思路:模拟。

      参考代码:

     1 #include <string>
     2 #include <map>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 int len, ans, kase = 0;
     7 bool flag;
     8 
     9 int main () {
    10     int T;
    11     cin >> T;
    12     map <string, bool> vis;
    13     while(T --) {
    14         vis.clear();
    15         string s1, s2, s12;
    16         ans = 0;
    17         cin >> len;
    18         cin >> s1 >> s2 >> s12;
    19         while(true) {
    20             flag = true;
    21             ans ++;
    22             string str;
    23             int i = 0;
    24             for(int j = 0; j < len; j ++) {
    25                 str += s2[i ++];
    26                 str += s1[j];
    27             }
    28             if(vis[str] && str != s12) {
    29                 ans = -1; //记得判重条件要放到最前面
    30                 break;
    31             }
    32             vis[str] = true;
    33             if(str == s12) break;
    34             s1 = str.substr(0, str.size() / 2);
    35             s2 = str.substr(str.size() / 2, str.size());
    36         }
    37         cout << ++ kase << " " << ans << endl;
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    c++程序—冒泡排序法(函数、指针)
    c++程序—统计成绩
    c++程序—冒泡排序法
    c++程序—逆置
    c++程序—五只小猪称体重
    c++程序—goto
    c++程序—乘法表
    c++程序—循环嵌套
    RGB保存 .bmp文件踩坑记
    vdi文件扩容
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10485970.html
Copyright © 2011-2022 走看看