[Codeforces]1017C. The Phone Number
題目URL:http://codeforces.com/contest/1017/problem/C
稍微想了一下,原來不是要我們去算真正的LIS&LDS(鬆了一口氣),其實這題有一個小技巧,就是自己sqrt(n)為一組為遞減順序,依此類推,至於如果sqrt後有小數,那就是剩下的自己一組,每一組的頭即是最小遞增數量(LIS),每一組的數量(剩下的除外)即是最小遞減的數量(LDS)
稍微想了一下,原來不是要我們去算真正的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; }
留言
張貼留言