這道題可以轉化為區間選點問題,即給定一些區間,找到最少的點使得每個區間至少存在乙個點。只不過這道題上的區間是在乙個圓上的,注意到n小於200,可以列舉開始的區間,然後分別進行一次貪心即可,時間複雜度為o(n^2)。只不過由於是在圓上,所以有很多細節需要注意,wa了n炮才調過了。
#include #include #include #include #include using namespace std;
const int maxn=410;
const double eps=1e-6;
const double pi=acos(-1.0);
int dcmp(double x)
return false;
}bool operator==(const interval& tmp) const
} p[maxn];
double length(double x,double y)
double formal(double rad)
int main()
{ int t;
scanf("%d",&t);
while(t--)
{scanf("%d%lf",&n,&d);
m=0;
for(int i=0;i
高效演算法設計專項 UVa 11572
題目大意就是求一串數中最長的子串,要求該子串中的數互不相同。這題掃一遍就可以了,可以一邊讀入一邊做。用乙個map對映距當前位置的值為i的最近的位置j,同時記錄乙個pre,表示從pre到當前位置沒有相同元素。然後在讀入的同時維護map和pre,同時更新最長的不含相同元素的子串即可。include in...
高效演算法設計專項 UVa 10827
這道題用o n 4 的方法水過了 就是把原來n n的矩陣擴充套件成2n 2n的矩陣,然後預處理出以 i,j 為右下角的矩陣的元素和。然後再列舉矩陣的左上角和右下角,當矩陣的長或寬大於n時,直接continue即可。include include include include using names...
高效演算法設計專項 UVa 10125
暴力列舉顯然會tle。lrj書裡介紹了中途相遇法,用map實現了一下,就是先用o n 2 建立乙個a b到乙個整數的對映,然後再用o n 2 列舉d c就可以在o n 2 複雜度下解決該問題了。需要注意的是a b c d不能重複,這裡我用map 實現以判重。只不過具體 比較醜 include inc...