2016 11 10解題報告

2021-07-24 12:35:26 字數 1893 閱讀 9797

2016.11.10

part.1

油滴擴充套件(

box)

解題思路

暴力搜尋(然而遞迴寫錯會很可怕),普遍用的stl求全排列然後搜的。注意求半徑時要注意該點是否包含在前面已處理過的點擴充套件過的範圍,此時這個點半徑為0。四捨五入手打乙個比較保險,(int)(x+0.5)

for (int i=1;i<=n;i++)

a[i]=i;

dowhile (next_permutation(a+1,a+n+1));

int p=(int)(sq-ans+0.5);//int向下取整;

cout<

part.2.

數列(sequence

解題思路

又一道經典dp題,類似於最長公共子串行。f[i][j]表示前i個數刪掉j個數得到的最優解:

for(int j=1;j<=n;j++)

} part.3 software

(software

二分+多重揹包(怎麼又是dp……),首先我是根據「求最大值的最小值或最小值的最大值,有一定概率要用二分」的經驗之談看出來是個二分,然後直覺告訴我還要用個揹包,結果一不留神想歪了以為要弄兩個揹包……dp完返回值處理的時候手抖加了個等號,wa了3個點(上帝保佑竟然還能過7個……)

解題思路

直接二分答案,mid表示二分得到的完成時間,然後假設在這些時間第乙個軟體恰完成m個,這樣就變成了乙個容量為mid的多重揹包,每個物品的件數k對應0~mid/t1[i],價值對應(mid-k*t1[i])/t2[i](充分利用第i個人工作的mid時間,列舉完成的軟體1的模組數),目標是使軟體2完成的模組數最多。這樣d一遍再看結果和m的關係,ans

二分過程:

int ef(int l,int r)

elsereturn ef(mid+1,r); }

dp過程:

int search(int v)}}

if(f[n][m]

elsereturn true; }

part.4

黑匣子(

blackbox

最初並沒有想到正解(平衡二叉樹、二叉排序樹並沒有涉獵),隨便寫了個快排暴力過了30分。回過頭看題解覺得神犇們真是機智……

解題思路

copy自前x

屆學長的題解,此法甚妙,蒟蒻口拙難以複述只好直接搬了)

1.首先維護乙個小根堆a和乙個大根堆b,時時保證b堆元素個數為(i-1)。

2. 對於每次add(k)操作,首先將k加入堆b並維護b的性質,再將b堆的堆頂元素彈出,插入堆a,同時維護a、b堆的性質。這樣不難發現b堆便是前(i-1)小的數,而a的堆頂元素便是第i的數。

3.對於每次get操作,彈出並輸出a的堆頂元素,並將這個元素插入b中,維護a、b堆的性質。

priority_queue,greater> q1;

priority_queue> q2;

ios::sync_with_stdio(false);

int n,m;

cin>>n>>m;

for (int i=1;i<=n;i++)

cin>>a[i];

for (int i=1;i<=m;i++)

cin>>b[i];

int t=1,x,y;

for (int i=1;i<=n;i++)

}

Block Voting 解題報告

這道題做的有點狼狽,效率不高,差一點就tle的ac了。看status裡的,ac的時間大多數都是0ms的。肯定有乙個更有效率的演算法的。下面說下我的狼狽演算法。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1223 問題描述 求每個party的權值。第i...

Safebreaker 解題報告

又是吉林大學一道acm題目,題目很簡單,直接暴力解決。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1718 問題描述 對乙個給定數0000 9999 根據一系列猜測,判斷這個數是否存在,存在的話,是否唯一 例如 3321,給定數 作出猜測,1223 ...

路由 解題報告

路由 問題描述 有乙個tcp ip網路 每台計算機都有乙個或多個網路介面。每個介面根據它的ip位址和子網掩碼來識別 即兩個4位元組的數,兩個字 節之間有乙個 號.子網掩碼有乙個二進位制表示法 有k個 1 然 後是 m 個 0 k m 8 4 32 如 212.220.35.77 是乙個 ip 地 址...