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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

1.16 模拟(排序)

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.16 模拟(排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# 總結 845分 我好菜啊qwq 第九題(站隊)出了bug。。。 沒有考慮到中位數會存在重疊錯誤問題(直接卡掉5個點就離譜) 后來發現其實第九題暴搜也能過。。。(要是IOI賽制就能ak了) 前面的水題不貼了 # 9.士兵站隊 【問題描述】 在一個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數坐標(x,y)表示。士兵們可以沿網格邊上、下、左、右移動一步,但在同一時刻任一網格點上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成一個水平隊列,即排列成(x,y),(x+1,y),...,(x+n-1,y)。如何選擇x 和y的值才能使士兵們以最少的總移動步數排成一列。 【編程任務】 計算使所有士兵排成一行需要的最少移動步數。 【輸入格式】 第1 行是士兵數n,1≤n≤10000。接下來n 行是士兵的初始位置,每行2 個整數x 和y,-10000≤x,y≤10000。 【輸出格式】 第1 行中的數是士兵排成一行需要的最少移動步數。 【輸入樣例】 5 1 2 2 2 1 3 3 -2 3 3 【輸出樣例】 8coding:1.暴力AC(枚舉最棒了) #include<cstdio>/*縱向就是輸油管問題,橫向想不明白的話,就枚舉找min吧。。**/ #include<cmath> #include<algorithm> #include<cstring> #include<climits> using namespace std; int M=200000000; int main(){int n;int x[10020],y[10020];int X,Y;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&x[i],&y[i]);}long long ans=0;sort(x+1,x+1+n);sort(y+1,y+1+n);Y=y[n/2+1];for(int i=1;i<=n;i++){ans += abs(Y-y[i]);}int mn=M,tot;for(X=x[1]-n/2;X<=x[n];X++){tot=0;for(int i=1;i<=n;i++){tot += abs(X+i-1-x[i]);}mn = min(mn,tot);}ans+=mn;printf("%lld",ans);return 0; }2.正解(O(n))://轉45度都是封建迷信。。。還是類似于輸油管的投票思想 #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<climits> using namespace std; int main(){int n;int x[10020],y[10020];int X,Y;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&x[i],&y[i]);}long long ans=0;sort(x+1,x+1+n);sort(y+1,y+1+n);for(int i=1;i<=n;i++){x[i] -= i-1;}sort(x+1,x+1+n);Y = y[(n+1)/2];X = x[(n+1)/2];for(int i=1;i<=n;i++){ans += abs(X-x[i]) + abs(Y-y[i]);}printf("%lld",ans);return 0; }}

總結

以上是生活随笔為你收集整理的1.16 模拟(排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

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