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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【模拟】签订协议(nowcoder 217601)

發(fā)布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【模拟】签订协议(nowcoder 217601) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簽訂協(xié)議

nowcoder 217601

題目大意

給出n個數(shù),現(xiàn)在有一個協(xié)議書,讓你從1傳到n,然后傳回1,繼續(xù)傳下去
對于第i個數(shù),如果前面i-1個數(shù)已經(jīng)匹配過了,那么當協(xié)議書傳過來時即可匹配,否則無法匹配
我讓你讓所有數(shù)匹配最少傳多少圈(向上取整)

輸入樣例#1

5 1 5 8 4 3

輸出樣例#1

3

輸入樣例#2

10 11 8 5 7 1 6 2 3 4 10

輸出樣例#2

6

樣例解釋#1

第一輪:8
第二輪:5 4 3
第三輪:1

數(shù)據(jù)范圍

1?n?8×1051?ai?1061\leqslant n \leqslant 8 \times 10^5\\1\leqslant a_i\leqslant 10^61?n?8×1051?ai??106

解題思路

如果直接暴力枚舉會TLE
當匹配完值為iii的點后需要匹配值為i+1i+1i+1的點
那么可以按aia_iai?排序,這樣得到匹配的數(shù)的順序
viv_ivi?為當前數(shù)的初始位置
如果vi>vi?1v_i>v_{i-1}vi?>vi?1?那么不用多傳一圈
否則要多傳一圈

代碼

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; int n, ans; struct node {int v, s; }a[800010]; bool cmp(node x, node y) {return x.s > y.s;//按給出的值排序 } int main() {scanf("%d", &n);for (int i = 1; i <= n; ++i){scanf("%d", &a[i].s);a[i].v = i;//記錄初始位置}sort(a + 1, a + 1 + n, cmp);//排序for (int i = 2; i <= n; ++i)if (a[i].v < a[i - 1].v)//要多傳一圈ans++;ans++;//不滿一圈的printf("%d", ans);return 0; }

總結(jié)

以上是生活随笔為你收集整理的【模拟】签订协议(nowcoder 217601)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。