theme:給定n與m,要求你用正整數填充n個元素,使得這n個元素的和<=m,定義喜愛度為i的個數使得2<=i<=n且a[i]=a[i-1]+1。
1<=n<=1e5,1<=m<=1e9
solution:構造題。考慮列舉分成幾個段i,若某段的長度為len,則該段的數為1~len,可知喜愛度應為n-i,所以我們的目標是使得n-i越大,也就是i越小越好。同時要滿足每段的和相加<=m.當段數確定時,可以推出從長度len到長度len+1和增加了len+1,設最大的長都為maxx,最小的為minn,則maxx+1,minn-1時和增加了maxx-minn+2,所以我們時maxx與minn盡量靠近,也就是每段的長度盡量相同是最優的。當段樹為i時可知每段的長度為n/i,還剩下res=n%i個元素,我們把它分配給res段,這res段長度為len+1,剩下i-res段長度為len .
#includetypedef long long ll;
#define far(i,s,n) for(int i=s;i>n>>m;
ll all=getsum(n);
if(all<=m)
far(i,1,n+1)
}}
題解 牛客練習賽51
字首a的數量,字尾c的數量,遇到b就計算一次答案。includeusing namespace std typedef long long ll const int n 1e5 100 char s n int cnt n int main int tmp 0 for int i 1 i n i p...
牛客練習賽51 A B C
前字尾維護字串中b左邊a的個數和b的個數,對於每個b,它能構成的的abc的個數即為它前面a的個數乘以它後面c的個數 include using namespace std define ll long long define inf 0x3f3f3f3f typedef pair int,int p...
牛客練習賽9
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...