zoukankan      html  css  js  c++  java
  • Kick Start 2013

    Practice Round

    1. 题目大意:给定一堆人名,从上向下扫描,一旦当前值比前一个的字典序小,就将当前值移动到正确的位置,不论移动多远,代价都是1,求代价总和。

    和插入排序类似,如果当前值(j)(j-1)小,将(j)移到前面合适的位置,此时前(j)个数是局部有序的。这道题只要求出代价和即可,不需要输出排序后的结果,不需要真正去移动,只要记录前(j)个的最大值,如果(j+1)比最大值小,那么必然触发一次移动。举例:
    2 1 5 3 0 j=1, max=2, cost++
    1 2 5 3 0 j=3, max=5, cost++
    1 2 3 5 0 j=0, max=5, cost++
    0 1 2 3 5
    有2个地方要注意:cin读入string时,会把空格/回车作为分隔符,遇到即停止,所以要用getline(),默认以回车结束;cin读完int后,换行符 仍然在输入流里,所以下一次的getline会先读 ,故用cin.get()先取走

    #include <iostream>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char** argv) {
        int T, N;
        cin >> T;
        for (int i = 0; i < T; ++i) {
            cin >> N;
            cin.get();
            vector<string> names(N);
            for (int j = 0; j < N; ++j) {
                getline(cin, names[j]);
            }
            
            string curMax;
            int money = 0;
            for (int j = 0; j < N; ++j) {
                if (j == 0) {
                    curMax = names[0];
                    continue;
                }
                if (names[j].compare(curMax) < 0) {
                    ++money;
                }
                else {
                    curMax = names[j];
                }
            }
            cout << "Case #" << i + 1 << ": " << money << endl;
        }
        return 0;
    }
    
    1. 题目大意:
  • 相关阅读:
    C++Builder中的异常传递
    lpc1343 usb isp not work in linux and mac
    玩玩Hiweed linux 2.0
    有关 stringWithString 和 initWithString
    Windows mobile 中获取内存使用情况
    玩玩xubuntu 8.10
    升级我的ipaq hx2110到Windows Mobile 6.0
    面试技巧 from IBM
    常用Sql语句
    c#的事件机制示例代码: 猫> 老鼠, 主人
  • 原文地址:https://www.cnblogs.com/EIMadrigal/p/14601735.html
Copyright © 2011-2022 走看看