日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

CSP认证201709-2公共钥匙盒[C++题解]:结构体、排序、枚举

發布時間:2025/4/5 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSP认证201709-2公共钥匙盒[C++题解]:结构体、排序、枚举 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 題目解答
      • 題目鏈接

題目解答



來源:acwing

分析:
采用結構體來存每個操作,保存啥呢?三個成員鑰匙id操作的類型:1表示還鑰匙,0表示取鑰匙;操作的時間tm; 然后結構體內部排序,先按照操作時間從小到大排序,操作時間相同的情況下,還鑰匙優先,然后還是相同的話,按照鑰匙id從小到大排序。直接在結構體內部重載小于號可以實現。

然后就是排序。接著就是遍歷處理即可。

ac代碼

#include<bits/stdc++.h> using namespace std; const int N = 1010; int n,m; int q[N]; bool st[N]; struct Op{int tm, type, id;bool operator<(const Op& t)const{if(tm != t.tm) return tm < t.tm;// 1表示還鑰匙,0表示取鑰匙if(type != t.type) return type > t.type;return id < t.id;} }op[N * 2];int main(){cin >> n >> m; int k = 0;while(m--){int id, start, remain;cin >> id >> start >> remain;op[k ++] = {start, 0, id}; // 0表示取鑰匙op[k ++] = {start + remain, 1, id}; //1表示還鑰匙}sort(op, op + k);for(int i = 1; i <= n; i ++) q[i] = i;for(int i = 0; i < k; i ++){int id = op[i].id; // 鑰匙的idif(!op[i].type){ // 取鑰匙for(int j = 1; j <= n; j ++){if(q[j] == id){q[j] = 0;break;}}}else{ // 還鑰匙for(int j = 1; j <= n; j ++)if(!q[j]){q[j] = id;break;}}}for(int i = 1; i <= n; i++) cout << q[i] <<" ";}

題目鏈接

https://www.acwing.com/problem/content/3251/

總結

以上是生活随笔為你收集整理的CSP认证201709-2公共钥匙盒[C++题解]:结构体、排序、枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。