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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

中石油oj 2654: 序列合并

發布時間:2024/10/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中石油oj 2654: 序列合并 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參照別人的思路自己寫的代碼。(代碼量很大也不夠優化。)

?

#include <iostream>
#include <cstring>
using namespace std;
const int inf=1e5+10;
int arr1[inf],arr2[inf],ans[inf];
int n;?? ??? ??? ??? ??? ?//使用結構體。?
struct node
{
?? ?int a;
?? ?int b;
};
node temp[inf];?

void bigstack(int i)?? ?//小根堆。i是第i個。?
{?? ?
?? ?while(i!=1)
?? ?{
?? ??? ?if(temp[i].a<temp[i/2].a)
?? ??? ??? ?swap(temp[i],temp[i/2]);
?? ??? ?else
?? ??? ??? ?break;
?? ??? ?i=i/2;
?? ?}
}
void stacksort()
{
?? ?int i=1;
?? ?while(i*2+1 <=n )?? ? ? ? ?? ?//這里是關鍵,只能夠進行考慮最后一個。也是不同的。完全是可以進行改進的。?
?? ?{?
?? ??? ?if(temp[i*2+1].a<temp[i*2].a&&temp[i].a>=temp[i*2+1].a)
?? ??? ?{
?? ??? ??? ?swap(temp[i],temp[i*2+1]);
?? ??? ??? ?i=i*2+1;?? ??? ?
?? ??? ?}?? ?
?? ??? ?else if(temp[i*2].a<=temp[i*2+1].a&&temp[i].a>=temp[i*2].a)
?? ??? ?{
?? ??? ??? ?swap(temp[i],temp[i*2]);
?? ??? ??? ?i=i*2;
?? ??? ?}
?? ??? ?else?? ??? ??? ? ? ??? ?//分布,先是從兩個進行考慮,之后在加條件罷了。?
?? ??? ??? ?break;?? ??? ??? ?
?? ?}?
}

int main()
{
?? ?while(~scanf("%d",&n))
?? ?{
?? ??? ?for(int i=1;i<=n;i++)
?? ??? ??? ?scanf("%d",&arr1[i]);
?? ??? ?for(int i=1;i<=n;i++)
?? ??? ??? ?scanf("%d",&arr2[i]);
?? ??? ?for(int i=1;i<=n;i++)
?? ??? ?{
?? ??? ??? ?temp[i].a=arr1[i]+arr2[1];
?? ??? ??? ?temp[i].b=i;
?? ??? ?}
?? ??? ?for(int i=2;i<=n;i++) ??
?? ??? ??? ?bigstack(i); ?///調用函數。
?? ??? ?//之后。
?? ??? ?int flag[inf]; ? ?//flag[i]代表的是第i個的指向。?
?? ??? ?for(int i=1;i<=n;i++)
?? ??? ??? ?flag[i]=1; ? ?//指向的是第一個。?? ??? ??? ??? ??? ??? ??? ??
?? ??? ?//因為是任意的一個是不好進行判定的,所以只能是結構體,結束的時候在看一下。?
?? ??? ?for(int i=1;i<=n;i++) ? ?//但是也是要進行記錄的。看來要是結構體。?
?? ??? ?{
?? ??? ??? ?ans[i]=temp[1].a; ? ? //就是尋找最為簡單的一條路,時空效率最為簡單的一條路,并且要代碼量也是要最少的。?
?? ??? ??? ?flag[temp[1].b]++; ? ?//值是第幾個,代表的死arr2【】,temp【i】.b應該是第幾個的角標吧。?
?? ??? ??? ?temp[1].a = arr1[ temp[1].b ]+arr2[ flag[temp[1].b] ];
?? ??? ??? ?stacksort();?? ? ? ? ? ? ? ? ? ? ? ? ? ??
?? ??? ?}?
?? ??? ?cout<<ans[1];
?? ??? ?for(int i=2;i<=n;i++)
?? ??? ??? ?cout<<" "<<ans[i];
?? ??? ?cout<<endl;
?? ?}?? ?
?? ?return 0;?? ?
}?

總結

以上是生活随笔為你收集整理的中石油oj 2654: 序列合并的全部內容,希望文章能夠幫你解決所遇到的問題。

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