#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain(){ int n, k; cin>>n>>k; int now=0; vector<int> v(n, 0); for(int i=0;i<n;i++) v[i]=i; for(int i=1;i<n;i++) { int l=v.size(); for(int j=1;j<k;j++) { now++; now%=l; } v.erase(v.begin()+now); } cout<<v[0]; } // 其實這個也可以過子任務二
子任務二
跟句子任務1的程式我們可以發現
1 2 3 4
for(int j=1;j<k;j++) { now++; now%=l; }
其實就是
1
now=(now+k-1)%l;
因此我們可以把這邊簡化成O(1)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain(){ int n, k; cin>>n>>k; int now=0; vector<int> v(n, 0); for(int i=0;i<n;i++) v[i]=i; for(int i=1;i<n;i++) { int l=v.size(); now=(now+k-1)%l; v.erase(v.begin()+now); } cout<<v[0]; }