2013多校第六場

2022-07-31 09:27:15 字數 1282 閱讀 1143

hdu 4655

題意:給乙個序列,每個位置可以塗1~ai種顏色,連續不相同的顏色為一段,對於乙個排列,所有的塗色方法產生的段數為s,求最大的s;

分析:對於乙個排序,所有的段數為n* - (相鄰兩個位置塗相同顏色的個數s);

怎麼計算相鄰兩個位置塗相同顏色的個數s?

p[i]表示字首積,即p[i] = a1*a2*..*ai; 

q[i]表示字尾積,即q[i] = ai*...*an;

s =sum( p[i-1]*q[i+2]*min(ai,ai+1) ) (0<=i要使s最小,即min(ai,ai+1)盡量小,假設序列ai

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8 typedef long

long

ll;9

const

int mod = (int)1e9+7;10

const

int n = 1000000+10;11

inta[n],b[n];

12int

n;13

ll p[n],q[n];

14int

main()

21 sort(a,a+n);

22int l = 0, r = n - 1;23

for (int i = 0; i < n; i++) else b[i] = a[r--];

27//

cout<28 }//

cout<29 ll sum =n;

30 p[0] = b[0]; q[n] = 1;31

for (int i = 1; i < n; i++) p[i] = p[i-1] * b[i] %mod;

32for (int i = n-1; i >= 0; i--) q[i] = q[i+1] * b[i] %mod;

33for (int i = 0; i < n; i++) sum = sum * b[i] %mod;

34 sum = (sum - (ll)min(b[0],b[1])*q[2]%mod + mod ) %mod;

35for (int i = 1; i < n-1; i++)

38 cout

4041

return0;

42 }

view code

杭電多校第六場(IF)

題意 有命題 將 b 進製數y按位相加,迴圈無窮次,最終結果若 x 0,則有y x 0,反之不然 給出b和x,判斷命題是否成立 打表發現的b x 1時成立,看到有數論大佬推出來的 想看推導的右轉 includeusing namespace std typedef unsigned long lon...

HDU 多校聯合第六場

uestc的題。果然,題意都弄得這麼晦澀。推個規律,mod r。偶推錯了。1個小時才過。三分做的。還是不知道怎麼證明他是凹函式,話說。以為神人想當然的說這是凹函式。怎麼證明?管他呢,真沒勁!話說偶已經推出來s1的和sum1,s2的和sum2。sum1 sum2必為偶數,才能yes。但是對於字串長度為...

牛客多校第六場

d 題意感覺說的不是很清楚,一開始題意弄錯了,以為是最優的方案,結果是對於每個盒子這個 so clever 的人的做法是優先選擇盡可能大的物品裝完乙個盒子,我就不知道這個人 聰明了。思路 賽後知道題意後,5分鐘寫完,瞎暴力就一發過了,我自己都有點出乎意料真水了。includeusing namesp...