Submission #2517201


Source Code Expand

#include <algorithm>
#include <iostream>
#include <utility>
#include <string>
#include <vector>
using namespace std;

int k;

// 左が遅いと正
int compareChar(const char lhs[], const char rhs[], int nl, int nr)
{
    // 空文字列は最後
    if (nl == 0 && nr > 0) return 1;
    if (nr == 0 && nl > 0) return -1;
    if (nl == 0 && nr == 0) return 0;

    int n = min(nl, nr);
    for (int i=0; i<n; i++)
    {
        if (lhs[i] > rhs[i]) return 1;
        if (lhs[i] < rhs[i]) return -1;
    }
    if (nl > nr) return 1;
    if (nl < nr) return -1;
    return 0;
}

int main()
{
    string line;
    cin >> line >> k;
    int len = line.size();
    const char* str = line.c_str();

    std::vector<pair<int, int> > best5(k, make_pair(0, 0));

    int atama = -1;

    while (true)
    {
        int min_ = 1000000;
        for (int i=0; i<len; i++)
        {
            if ((int)str[i] < min_ && (int)str[i] > atama) min_ = str[i];
        }
        if (min_ == 1000000) break;
        atama = min_;

        std::vector<int> min_list;
        for (int i=0; i<len; i++)
        {
            if (str[i] == atama) min_list.push_back(i);
        }

        for (auto i : min_list)
        {
            for (int j=1; j<=5; j++)
            {
                if (i+j>len) break;
                for (int l=0; l<k; l++)
                {
                    int res = compareChar(str + best5[l].first, str + i, best5[l].second, j);
                    if (res > 0)
                    {
                        best5.insert(best5.begin() + l, make_pair(i, j));
                        best5.pop_back();
                        break;
                    }
                    if (res == 0) break;
                    if (res < 0) continue;
                }
            }
        }
        if (best5[k-1].second > 0)
        {
            for (int i = best5[k-1].first; i<best5[k-1].first+best5[k-1].second; i++)
                cout << str[i];
            cout << "\n";
            return 0;
        }
    }

    return 0;
}

Submission Info

Submission Time
Task C - K-th Substring
User hitonanode
Language C++14 (GCC 5.4.1)
Score 300
Code Size 2119 Byte
Status AC
Exec Time 2 ms
Memory 256 KB

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 200 / 200 100 / 100
Status
AC × 3
AC × 11
AC × 19
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt
Subtask 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 2_011.txt, 2_012.txt, 2_013.txt, 2_014.txt, 2_015.txt, 2_016.txt, 2_017.txt, 2_018.txt
Case Name Status Exec Time Memory
0_000.txt AC 1 ms 256 KB
0_001.txt AC 1 ms 256 KB
0_002.txt AC 1 ms 256 KB
1_003.txt AC 1 ms 256 KB
1_004.txt AC 1 ms 256 KB
1_005.txt AC 1 ms 256 KB
1_006.txt AC 1 ms 256 KB
1_007.txt AC 1 ms 256 KB
1_008.txt AC 1 ms 256 KB
1_009.txt AC 1 ms 256 KB
1_010.txt AC 1 ms 256 KB
2_011.txt AC 2 ms 256 KB
2_012.txt AC 2 ms 256 KB
2_013.txt AC 1 ms 256 KB
2_014.txt AC 1 ms 256 KB
2_015.txt AC 1 ms 256 KB
2_016.txt AC 1 ms 256 KB
2_017.txt AC 1 ms 256 KB
2_018.txt AC 1 ms 256 KB