ccf-csp #201703-2 学生排队
生活随笔
收集整理的這篇文章主要介紹了
ccf-csp #201703-2 学生排队
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://118.190.20.162/view.page?gpid=T56
題目分析
- 一開始看到題目描述以為是一道有點意思的算法題,看完數據范圍1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,發現原來是普通的模擬題。
- 需要用到一個mark數組記錄各個編號學生所在的位置,每次調整隊列時,先通過mark數組得到第p號學生的位置,然后根據q的正負值對p號學生的位置進行調整,調整的過程中要記得更新mark數組的值。雖然做下來是O(mq)O(mq)O(mq)的時間復雜度,但是跑得挺快的hhh。
代碼如下
#include <iostream> #include <algorithm> using namespace std; const int maxn = 1005; int n, m, p, q; //a[i]表示i號位置站的學生編號,mark[i]表示i號學生的位置 int a[maxn], mark[maxn]; int main() {ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) {a[i] = i;mark[i] = i; }for (int i = 1; i <= m; i++) {cin >> p >> q;int idx = mark[p];if (q > 0) {for (int i = 0; i< q; i++) {mark[a[idx + i]]++;mark[a[idx + i + 1]]--;swap(a[idx + i], a[idx + i+ 1]);}} else {q = -q;for (int i = 0; i< q; i++) {mark[a[idx - i]]--;mark[a[idx - i - 1]]++;swap(a[idx - i], a[idx - i - 1]);}}}for (int i = 1; i <=n; i++) {cout << a[i] << " ";}cout << endl;return 0; }總結
以上是生活随笔為你收集整理的ccf-csp #201703-2 学生排队的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决h5py\_init_.py:26:
- 下一篇: ccf-csp #201709-2 公共