hdu #5178 : pairs
傳送門:
題意:n個數,問有多少對數差值小於k。
思路:排個序,開個佇列。每次乙個新的數先把比它小的都從佇列中去了,然後答案加上佇列大小,最後把自己塞進佇列。按順序走一遍行了。
ac**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define p pair#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define mod(a,b) aq;
for (int i = 1; i <= n; i++)
}int main()
return 0;
}
openj_bailian #2299 : ultra-quicksort
傳送門:
題意:給出一串數,每個數只能和相鄰的數交換位置,問最少交換多少次能使這一串數從小到大排序。
思路:求逆序對個數,樹狀陣列直接做就行了。或者歸併排序來做也可以。
ac**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define p pair#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define mod(a,b) amp;
void init()
void add(int x)
int query(int x)
int main()
sort(a + 1, a + n + 1);
cnt = 0;
for (int i = 1; i <= n; i++)
for (int i = 1; i <= n; i++)
b[i] = mp[b[i]];
cl0(a);
ll ans = 0;
for (int i = n; i > 0; i--)
printf("%lld\n", ans);
} return 0;
}
hdu #2083 : 簡易版之最短距離
傳送門:
題意:給出n個點,選擇乙個點使得所有點到它的距離之和最小,問最小距離和是多少。
思路:直接找最中間位置的點就可以了。
比如對於a、b兩個點(a<=b),選擇點c,若a<=c<=b則無論c在哪都有|ac|+|cb|=|b-a|;否則|ac|+|cb|>=|b-a|
ac**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define p pair#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define mod(a,b) aopenj_bailian #1064 : cable master
傳送門:
題意:給n塊木頭,以及最終需要的塊數k。求出問把木頭切成k塊後,其中最短的那塊的最大值。
思路:二分答案。精度問題的話可以直接*100轉化成整數來求,或者二分個幾百次。
ac**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define p pair#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define mod(a,b) a= k)
l = mid;
else
r = mid;
} int a1 = l / 100, a2 = l % 100;
printf("%d.", a1);
if (a2 < 10)printf("0");
printf("%d\n", a2);
} return 0;
}
openj_bailian #2456 : aggressive cows
傳送門:
題意:有n個牛棚,c頭牛。牛比較兇猛所以它們太近了要打架。給出n個牛棚的位置,每個牛棚放乙隻牛,問兩隻牛之間的最短距離的最大值是多少。
思路:二分答案。預設1號位置放牛,之後隔著dis位置的牛棚放牛,看放不放的下。
ac**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define p pair#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define mod(a,b) a0)
return true;
}int main()
printf("%d\n", l);
} return 0;
}
演算法複習 分治演算法
先來看乙個經典的二分查詢例子。int binarysearch vector nums,int target return 1 時間複雜度是 o logn 我們看到,二分查詢貫徹了分治的思想。當我們要解決乙個輸入規模較大 不妨設為 n 的問題時,可以將這個問題分解成 k 個不同的子集,如果能得到 k...
複習一 分治演算法
臨近期末,把之前做過的題目 有部分是未做過的 重新做一遍,整合到一起,為了省時間,就不貼 了,只分析思路。分治演算法題目 1 search a 2d matrix ii 在乙個每行每列都有序的矩陣中搜尋某一數字。2 kth largest element in an array 找到陣列裡第k大元素...
演算法設計與分析複習 分治法演算法描述
分治 劃分 解子問題 組合 每個遞迴演算法均可以轉換為迭代演算法 include include 尋找最大最小元素,最大比較次數 3 n 2 2 minmax low,high if high low 1 if arr low arr high return arr low arr high els...