原本的測資加入了最後一筆導致單純使用 vector.erase() 模擬移除淘汰掉的號碼出現 TLE
這時候需要回歸到剩餘人數的情況,當剩餘人數過多時當然還是維持使用 vector 模擬過程即可
但是當剩餘人數過少時就需要『動態規劃』找出剩下的號碼,做法類似 uva-1452 的經典問題
加上找出第 K 次時淘汰的號碼在哪個位置後輸出下一個合法位置上的號碼。
這邊為了確認想法是否合乎出題者,用 Try & Error 方式拿到後台測資實際上是不合規定的,先跟出題者說聲抱歉還請見諒
辛苦了,互相交流才會進步,需要測資或提示可以寄站內信給我哦。
黑暗作法是使用#include<ext/rope>的rope就可以用vector模擬的方法AC了
黑暗作法是使用#include<ext/rope>的rope就可以用vector模擬的方法AC了
用#include<ext/rope>的rope
#include<iostream>
#include<algorithm>
#include <ext/rope>
//#include <x86intrin.h>
using namespace std;
using namespace __gnu_cxx;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t,k,m,j=0,length;
cin>>t>>m>>k;
rope<int> v;
for(int i=0;i<t;i++) v.push_back(i+1);
while(k--)
{
j+=m-1;
if(j>=v.size()) j%=v.size();
v.erase(j,1);
//for(int ii=0;ii<v.size();ii++) cout<<v[ii]<<" ";
//cout<<endl;
}
if(j>=v.size()) j-=v.size();
cout<<v[j]<<endl;
return 0;
}
AC (0.6s, 6.5MB) |