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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

E:Johnny and Grandmaster

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 E:Johnny and Grandmaster 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Johnny and Grandmaster

或許更好的閱讀體驗

思路

這道題就是把一組數分成兩個集合,使這兩個集合的對p的次方的和的差的最小值,也就是求sum1?sum2sum1 - sum2sum1?sum2得最小值, 由于結果過大我們可能需要對結果取模。那么這題得關鍵在于我們應該如何分配這兩個集合,也就是如何得到最優的sum1?sum2sum1 - sum2sum1?sum2的值。

我們先把給定的數組從大到小排序,我們一定可以得到pa[1]=pa[2]+pa[3]+pa[4]……+pa[x]p ^ {a[1]} = p ^ {a[2]} + p ^ {a[3]} + p ^ {a[4]} …… + p ^ {a[x]}pa[1]=pa[2]+pa[3]+pa[4]+pa[x],這一點是顯然成立的。

我們先分配最大的數到集合111中,接下來我們再分配其他的數到集合222,中,直到sum1==sum2sum1 == sum2sum1==sum2,我們再重新分配一個數到集合111中,重復如此操作我們就可以的到最小值。

這題的關鍵就在于我們如何判斷這兩個集合中的數和是相等的,容易想到sum1==sum2?>sum1?sum2==0sum1 == sum2 -> sum1 - sum2 == 0sum1==sum2?>sum1?sum2==0,于是我們好像可以利用這個點來完美的實現這個算法,但是很遺憾,wa在了test7,這里可能存在一個極大的誤差,當我們的剛好是模數的時候,顯然這里就錯了,所以我們必須選定一個方法來避免這個錯誤,于是就有了,雙模數判定差值是否為0。

代碼

#include <bits/stdc++.h>using namespace std;typedef long long ll;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 3) + (x << 1) + (c ^ 48);c = getchar();}return f * x; }const int mod = 1e9 + 7, MOD = 1e9 + 3;//用兩個模數來判斷是否為零, const int N = 1e6 + 10;ll a[N];ll qpow(ll a, ll n, ll mod) {ll ans = 1;while(n) {if(n & 1) ans = (ans * a) % mod;a = (a * a) % mod;n >>= 1;}return ans; }int main() {// freopen("in.txt", "r", stdin);int t = read();while(t--) {int n = read(); ll p = read();for(int i = 1; i <= n; i++)a[i] = read();sort(a + 1, a + 1 + n, greater<ll> ());char *str = "okkkk";ll ans1 = 0, ans2 = 0;for(int i = 1; i <= n; i++) {if(!ans1 && !ans2) {//當這兩個數同時為零的時候代表兩個集合的差值為零。ans1 = (ans1 + qpow(p, a[i], mod)) % mod;ans2 = (ans2 + qpow(p, a[i], MOD)) % MOD;}else {ans1 = (ans1 + mod - qpow(p, a[i], mod)) % mod;ans2 = (ans2 + MOD - qpow(p, a[i], MOD)) % MOD;}}printf("%lld\n", ans1);}return 0; }

總結

以上是生活随笔為你收集整理的E:Johnny and Grandmaster的全部內容,希望文章能夠幫你解決所遇到的問題。

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