[Codeforces]1017C. The Phone Number

題目URL:http://codeforces.com/contest/1017/problem/C
稍微想了一下,原來不是要我們去算真正的LIS&LDS(鬆了一口氣),其實這題有一個小技巧,就是自己sqrt(n)為一組為遞減順序,依此類推,至於如果sqrt後有小數,那就是剩下的自己一組,每一組的頭即是最小遞增數量(LIS),每一組的數量(剩下的除外)即是最小遞減的數量(LDS)


#include<bits/stdc++.h>
using  namespace std;
main()
{
    priority_queue<int,vector<int>> pq;
    int num,isq,flag=1;
    double sq;
    cin >> num;
    isq=sqrt(num);
    sq=sqrt(num);
    if(sq==(double)isq)
    {
        for(int i=1;i<=num;i++)
        {
            pq.push(i);
            if(i%isq==0)
            {
                while(!pq.empty())
                {
                    cout << pq.top() <<" ";
                    pq.pop();
                }
            }
        }
    }
    if(sq>(double)isq)
    {
        isq++;
        for(int i=1;i<=num;i++)
        {
            pq.push(i);
            if(i%isq==0)
            {
                while(!pq.empty())
                {
                    cout << pq.top() <<" ";
                    pq.pop();
                }
            }
        }
        while(!pq.empty())
        {
            cout << pq.top() << " ";
            pq.pop();
        }
        cout << endl;
    }
    return 0;
}

留言

這個網誌中的熱門文章

[ZJ] b229: TOI 2009 第一題:路徑問題

交大資工(APCS組)(面試&心得)

滿是挫傷的ION CAMP