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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2017/11/3模拟赛

發(fā)布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017/11/3模拟赛 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

塊(block
【問題描述】
拼圖達人小 C 手里有 n 1*1 的正方形方塊, 他希望把這些方
塊拼在一起, 使得拼出的圖形周長最小, 要求方塊不能重疊。 擅長拼
圖的小 C 一下就求出了這個周長, 順便他想考考你會不會求。
【輸入格式】
多組數(shù)據(jù), 第一行一個正整數(shù) T, 表示數(shù)據(jù)組數(shù)。
接下來 T 行, 每行一個正整數(shù) n, 表示方塊數(shù)。
【輸出格式】
輸出 T 行, 每行一個正整數(shù), 表示答案。
【樣例輸入】
3 4 1
1
22
【樣例輸出】
8
14
20
【數(shù)據(jù)范圍】
對于 20%的數(shù)據(jù), n<=20
對于 40%的數(shù)據(jù), n<=1000
對于 60%的數(shù)據(jù), n<=10^6
對于 80%的數(shù)據(jù), n<=10^10
對于 100%的數(shù)據(jù), n<=10^12T<=10

題解:二分答案即可。

代碼如下:

1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 long long n,l,r,mid,ans; 5 bool check(long long x){ 6 x>>=1; 7 if(x&1){ 8 long long t1=x>>1,t2=(x>>1)+1; 9 return t1*t2>=n; 10 } 11 return (x>>1)*(x>>1)>=n; 12 } 13 int main() 14 { 15 freopen("block.in","r",stdin); 16 freopen("block.out","w",stdout); 17 int T; scanf("%d",&T); 18 while(T--){ 19 scanf("%lld",&n); 20 l=1; r=1e9; 21 while(l<=r){ 22 mid=l+r>>1; 23 if(check(mid)) r=mid-1,ans=mid; 24 else l=mid+1; 25 } 26 printf("%lld\n",ans); 27 }return 0; 28 }

?

樹(tree
【問題描述】
今天 F 大爺看到了一張 n 個點的無向完全圖, 每條邊有邊權(quán)。 F
大爺一開心就花 0.03 飛秒(即3*10-17 秒) 求了一下這張圖的最小生
成樹以及最小生成樹的個數(shù)。 F 大爺驚喜地發(fā)現(xiàn)這張圖只有一個最小
生成樹, 他現(xiàn)在更開心了, 于是他把這個最小生成樹告訴了你, 要你
求出原來的完全圖中邊權(quán)和最小是多少。
【輸入格式】
多組數(shù)據(jù), 第一行一個正整數(shù) T, 表示數(shù)據(jù)組數(shù)。
每組數(shù)據(jù)的第一行一個正整數(shù) n, 表示點數(shù)。
接下來 n-1 行, 每行三個正整數(shù) xi,yi,wi, 表示最小生成樹上 xi
yi 之間有一條權(quán)值為 wi 的邊。
【輸出格式】
輸出 T 行, 每行一個整數(shù), 表示答案。
【樣例輸入】
2 3 1
2 4
2 3 7
4 1
2 1
1 3 1
1 4 2
【樣例輸出】
19
12
【數(shù)據(jù)范圍】
對于 20%的數(shù)據(jù), T,n,wi<=5
對于另外 30%的數(shù)據(jù), n<=1000, 給的樹是一條鏈;
對于 100%的數(shù)據(jù), T<=10n<=20000wi<=10000

?

題解:首先把邊從小到大排序,然后按順序合并,假設2個完全圖合并,那么答案就+=2個完全圖點數(shù)之積*(邊權(quán)+1)-1。

代碼如下:

1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #define MN 20005 5 using namespace std; 6 long long ans; 7 int n,fa[MN],siz[MN]; 8 struct node{int u,v,w;}e[MN]; 9 bool cmp(node a,node b){return a.w<b.w;} 10 int ff(int u){return fa[u]==u?u:fa[u]=ff(fa[u]);} 11 void unite(int u,int v,int w){ 12 u=ff(u); v=ff(v); 13 ans+=1LL*siz[u]*siz[v]*(w+1)-1; 14 fa[u]=v; siz[v]+=siz[u]; 15 } 16 int main() 17 { 18 freopen("tree.in","r",stdin); 19 freopen("tree.out","w",stdout); 20 int T; scanf("%d",&T); 21 while(T--){ 22 scanf("%d",&n); ans=0; 23 for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1; 24 for(int i=1;i<n;i++) 25 scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); 26 sort(e+1,e+n,cmp); 27 for(int i=1;i<n;i++) 28 unite(e[i].u,e[i].v,e[i].w); 29 printf("%lld\n",ans); 30 } 31 }

球(ball
【問題描述】
n 個不同顏色的球排成一排, 其中 n 為偶數(shù)。 小 D 打算把這
些球按照某種玄妙的順序放入一個球筒中。每次他會選擇一個不是當
前第一個的球, 先把這個球放入球筒, 接著把這個球的前一個也放入
球筒, 重復這個操作直到所有球都進入球筒。 小 D 希望最后球筒中
從頂?shù)降椎念伾蛄凶值湫蜃钚?#xff0c; 但他不會做, 所以請你幫幫他。
【輸入格式】
第一行一個正整數(shù) n, 表示球的個數(shù)。
第二行 n 個正整數(shù) ai, 分別表示每個球的顏色。
【輸出格式】
輸出一行 n 個正整數(shù), 表示球筒字典序最小的顏色序列。
【樣例輸入 1
4 3
2 4 1
【樣例輸出 1
3 1 2 4
【樣例輸入 2
8 4
6 3 2 8 5 7 1
【樣例輸出 2
3 1 2 7 4 6 8 5
【數(shù)據(jù)范圍】
對于 30%的數(shù)據(jù), n<=10
對于 60%的數(shù)據(jù), n<=1000
對于 100%的數(shù)據(jù), n<=2000001<=ai<=nai 互不相同。

代碼如下:60分

1 #include<cstdio> 2 #include<iostream> 3 #define MN 200005 4 int a[MN],n; 5 bool b[MN]; 6 int main() 7 { 8 freopen("ball.in","r",stdin); 9 freopen("ball.out","w",stdout); 10 scanf("%d",&n); 11 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 12 a[0]=0x7fffffff; 13 for(int i=1;i<=n/2;i++){ 14 int t1=0,t2=0; 15 bool f=false; 16 for(int j=1;j<=n;j++) 17 if(!b[j]){ 18 f=f?0:1; 19 if(f&&a[j]<a[t1]) t1=j; 20 } 21 b[t1]=true; f=false; 22 for(int j=t1+1;j<=n;j++) 23 if(!b[j]){ 24 f=f?0:1; 25 if(f&&a[j]<a[t2]) t2=j; 26 } 27 else break; 28 b[t2]=true; 29 printf("%d %d ",a[t1],a[t2]); 30 } 31 return 0; 32 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Beginner-/p/7792687.html

總結(jié)

以上是生活随笔為你收集整理的2017/11/3模拟赛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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