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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CF1305E Kuroni and the Score Distribution

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

CF1305E Kuroni and the Score Distribution

題意:

題解:

一開始想這個題,想法是一開始順著填1,2,3…然后多刪少補
如果1,2,3,4…這樣順延的填,對于ak=ka_{k}=kak?=k可以貢獻?k?12?\lfloor\frac{k-1}{2} \rfloor?2k?1??的答案(這個寫寫就試出來了)
現在我們設構造了1到k,然后三元組數量剛好超過m,假設超過答案x。對于一個k,按照上述方式可以貢獻?k?12?\lfloor\frac{k-1}{2} \rfloor?2k?1??的答案,現在我們想要其貢獻?k?12??x\lfloor\frac{k-1}{2} \rfloor-x?2k?1???x的貢獻,這樣就可以正好湊出m,那就需要讓其中x對(i,j)無效。
如何讓x對無效?我們令當前的k變為k+2x,前k-1個數中最大的是k-1,原先k-1和1和k組合成三元組(k-1+1=k),現在k變成k+2x,那么k-1只能和2x+1去匹配,前2x個數原先都能組成三元組,現在不行了,這樣不就少掉2x個可以用的數,答案就變成?k?1?2x2?=?k?12??x\lfloor\frac{k-1-2x}{2} \rfloor=\lfloor\frac{k-1}{2} \rfloor-x?2k?1?2x??=?2k?1???x
現在m已經構造好了,n個數如何補齊,這個我和隊友想了很久,我想的是差級補充但是不對,因為你要考前之前填充的數的影響。最佳是到這搞,我們之前已經填充了一些數,如果之前填充的最大數是w,那就從1e9開始按照2 * j的步長遞減即可,因為這樣間隔為2j,而之前所能貢獻的最大是j+(j-1),剛好組不成三元組

代碼:

#include <bits/stdc++.h> #include <unordered_map> #define debug(a, b) printf("%s = %d\n", a, b); using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> PII; clock_t startTime, endTime; //Fe~Jozky const ll INF_ll= 1e18; const int INF_int= 0x3f3f3f3f; void read(){}; template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar) {x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...); } template <typename T> inline void write(T x) {if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0'); } void rd_test() { #ifdef ONLINE_JUDGE #elsestartTime = clock ();freopen("data.in", "r", stdin); #endif } void Time_test() { #ifdef ONLINE_JUDGE #elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC); #endif } int n,m; const int maxn=2e5+9; int ans[maxn]; int main() {//rd_test();cin>>n>>m;int cnt=0;bool f=0;for(int i=1;i<=n;i++){ans[i]=i;cnt+=(i-1)/2;if(cnt>=m){int s=1e9;int x=cnt-m;//多出部分 ans[i]+=2*(cnt-m); for(int j=n;j>i;j--){s-=(ans[i]+1);ans[j]=s;}f=1;break;}}if(f){for(int i=1;i<=n;i++){printf("%d ",ans[i]);}}else {printf("-1\n");return 0;}//Time_test(); }

總結

以上是生活随笔為你收集整理的CF1305E Kuroni and the Score Distribution的全部內容,希望文章能夠幫你解決所遇到的問題。

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