作為今天膜你抄模擬賽上唯一切掉的題目,小w在此氵一篇題解。
比賽中的題目,題庫還沒有
有乙個長度為\(n\)的實數序列,下標從\(1\)開始,其中第\(k\)個位置的實數為\(p\cdot(sin(a\cdot k+b)+cos(c\cdot +d)+2)\),\(sin\)和\(cos\)採用弧度制,其中\(p,a,b,c,d\)均為給定的整數。
你需要從這個序列中選擇兩個位置(可以相同),使前邊的位置上的數字減去後邊的位置上的數字最大。
如果選擇了兩個相同的位置,那麼差為\(0\)。
從檔案weight.in中讀入資料。
一行六個整數\(p,a,b,c,d,n\)。
輸出到檔案weight.out中。
一行乙個實數表示最大的差值,保留六位小數。
小w破天荒地給了樣例。
100 432 406 867 60 1000
399.303813
對於\(30\%\)的資料,\(1\leq p,a,b,c,d\leq 1000\),\(1\leq n \leq 1000\);
對於\(100\%\)的資料,\(1\leq p,a,b,c,d\leq 1000\),\(1\leq n \leq 10^6\)。
這道題居然後\(sin\)和\(cos\)!小w哭了,於是試了試cmath
發現,果然有可以!
那我們就讀入,然後處理,最後sort
一遍排個序,用最大值減去最小值就好了唄~
#include #include #include #include #include using namespace std;
#define maxn 1000007
double qwq[maxn] = ;
int p, a, b, c, d, n;
int main()
sort(qwq + 1, qwq + 1 + n);
printf("%0.6lf", qwq[n] - qwq[1]);
fclose(stdin);
fclose(stdout);
return 0;
}
複雜度\(o(nlogn)\)
一切看起來都是辣麼完美。
但是!但是
使前邊的位置上的數字減去後邊的位置上的數字最大
也就是說,順序並不能打亂!
也就是說,不能用sort
!
那麼,我們換個思路
我們先考慮打暴力,直接兩重迴圈列舉每兩個數的差然後取最大值。
#include #include #include #include #include using namespace std;
#define maxn 1000007
double qwq[maxn] = ;
int p, a, b, c, d, n;
int main()
double maxn = -maxn;
for (int i = 1; i <= n; i++)}}
printf("%0.6lf", maxn);
fclose(stdin);
fclose(stdout);
return 0;
}
這樣的話……複雜度\(o(n^2)\)
太慢了啊喂!
這時,小w靈機一動!我們可以直接把處理放到預處理中!
我們在預處理的迴圈中,找出目前最大值的下標,然後用目前最大值減去目前的值,若比之前最大值減目前的值大,就更新,最後輸出。
#include #include #include #include #include using namespace std;
#define maxn 1000007
double qwq[maxn] = ;
double maxn = -maxn;
int p, a, b, c, d, n, awa;
int main()
if (qwq[i] > qwq[awa])
}printf("%0.6lf", maxn);
fclose(stdin);
fclose(stdout);
return 0;
}
這樣,複雜度成功降到\(o(n)\)!
題解 · 完
YbtOJ 最大均值
因此,這個 text 就是所求的最大的平均值 將上個轉化來的問題繼續轉換 既然上個問題中是使平均值不小於 text 那麼如果將 a 序列的所有值都減去 text 那麼問題又變成了 是否存在乙個長度不小於 l 的子段,子段和非負 子段和可以通過字首和相減得到,即設 text i 為 a 1,a i 的...
最大權森林問題
題目大意 一共n個男的m個女的,要把它們都招募了,但是有r個男女組合親密度,這時候徵募費用就是10000 已經徵募的人和自己的親密度的最大值 求最小徵募費用 看到這題時我的第一反應畫了個二分圖 雖然我不會二分圖 然後連了r條線,啥都不會 後來看了大神題解,看完感覺思路是真的簡單 大神思路 不管男還是...
最大生成樹 最大權森林
題意 給定n個男生和m個女生的關係,各個關係具有一定的權值,然後要挑選出所有人,每個人的代價是10000,但挑選人的過程中這些權值就是可以用來減去費用,求cost的min include include include include using namespace std const int m ...