2022牛客寒假演算法基礎集訓營1

2022-09-19 13:00:21 字數 3940 閱讀 8374

賽場上完成度:11/12

rank:33

a和的數根=數根的和,因此每個人的權值等價於權值的數根。

設f[i][j]表示前i個人湊出j的方案數,直接根據意義轉移即可。

**:

#includeusing namespace std;

const int mo=998244353;

int a[1000010],b[1000010],s[1000010];

int cal(int x)

x=z;

} return x;

}int main()

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

for (int i=1;i<=9;i++) printf("%d ",s[i]);

}

b不難發現,對於模3相同的初始分數,在經過相同的區間之後,分數的變化量相同。

因此可以考慮分塊,預處理每一塊對模3為0,1,2的初始分數的影響,對於每次詢問,塊前後的部分暴力,對於整塊直接計算對答案的影響。

總複雜度o(n+qn^0.5)

**:

#includeusing namespace std;

const int n=2e5+10;

int le[500],ri[500],g[500][5],fr[n];

int main()

if (n%k)

for (int i=1;i<=cc;i++)

g[i][p]=x-p;

} }for (int i=1;i<=q;i++)

printf("%d\n",x);

continue;

} for (int j=l;j<=ri[cl];j++)

for (int j=cl+1;jc

貪心地想,如果i和前面某個語句衝突,則在i前插入剛好能解決衝突的空指令。

這個貪心正確性顯然。

#includeusing namespace std;

int st[100000],rk[100000];;

int main()

if (p!=-1)

st[++tl]=i;

rk[i]=tl;

} printf("%d\n",ans);

}

d第一問,2*3*5*...一直到再乘超過n。

第二問,不大於n的最大質數。

證明略了,懶得打(之前打了乙份,**崩潰沒儲存,寄!

#includeusing namespace std;

int zs[100];

int pd(int x)

int main()

int x=1,j=1;

while (x*zs[j]<=n&&j<=k)

printf("%d ",x);

for (int i=n;i>=2;i--)

}//if (n==2) printf("%d\n",n);

}}

e純純的簽到,特判一下邊界。

每次可以運出m-1個人,最後一輪最多運m個人。

#includeusing namespace std;

int main()

if (x<=y)

int ans=0;

/*int z=x/(y-1);

x=x%(y-1);

ans=ans+(z-1)*2;

ans=ans+1;

if (y==2) ans=ans-2;

printf("%d\n",ans);*/

x=x-y;

ans=ans+x/(y-1)*2;

if (x%(y-1)) ans=ans+2;

printf("%d\n",ans+1);

}}

f大於等於m的數記為1,其他記為0,合法情況就是1的個數》0的個數,貪心地考慮切分,如果一段可以切成兩份,則兩份的1都要大於各種的0的數量,因此,掃一遍,能切就切。

#includeusing namespace std;

int a[1000010];

int main()

if (s1=q2/2+1&&((n-i)/2+1<=s1)||(n-i)==0)

}printf("%d\n",ans);

}}

g不會。h

樹狀陣列優化一下暴力的過程即可。

#includeusing namespace std;

int a[1000010],b[1000010];

long long tr1[1000010],tr2[1000010];

void p1(int x,int y)

}void p2(int x,int y)

}long long q1(int x)

return ret;

}long long q2(int x)

return ret;

}int main()

long long ans1=0;

//for (int i=1;i<=n;i++) for (int j=i;j<=n;j++) ans1=ans1+abs(a[i]+a[j]-1000);

long long ans=0,ss=0;

for (int i=n;i>=1;i--)

printf("%lld\n",ans);

//printf("%d\n",ans1);

//for (int i=1;i<=n;i++) printf("%d\n",a[i]);

//printf("%lld\n",ans-ans1);

}

im句歌詞和1句歌詞的區別,就是答案乘m。

每個人的策略應當相同,考慮每個人的策略是乙個概率p,即有p的概率唱,那麼這句歌詞無效的概率就是p^n+(1-p)^n,要使得這個概率最小,可得p=0.5

#includeusing namespace std;

const int mo=1e9+7;

int ksm(int x,int y)

return ret;

}int main()

}}

j每次考慮加入乙個小朋友,要使得當前已經加入的小朋友的集合是合法的,貪心地考慮,每次選擇權值最大的小朋友,如果小朋友是安靜的,那加入後不會影響合法性,如果小朋友是鬧騰的,就要判斷加入後是否會由合法變為不合法。

最後看看集合大小是否能過達到n

#includeusing namespace std;

int a[100010],b[100010];

int main()

if (j<=m&&b[j]>=a[i]&&j*2<=k+1)

if (i<=n)

if (j*2<=k+1)

break;

} if (s==k) printf("%lld\n",ans);else printf("-1\n");

}}

k設f[l][i][j][k]表示,前l個島嶼,後三個島嶼依次是i,j,k,所能擁有的最多的綠島數量。

轉移,每次列舉下乙個島嶼的顏色,判斷新的組合是否滿足s中羅盤的**,再開乙個g陣列記錄某種狀態是否存在合法的方案,新狀態只能從合法的舊狀態轉移過來。

#includeusing namespace std;

int g[100010][4][4][4],f[100010][4][4][4];

int main()

if (s[3]=='r'&&rs>gs)

if (s[3]=='b'&&rs==gs)

}for (int l=3;lrs)

if (s[l+1]=='r'&&gsl

模擬一下即可。

#includeusing namespace std;

int main()

printf("%.8lf\n",ans);

}}

2022牛客寒假演算法基礎集訓營3

智乃去註冊賬號,他發現 的的密碼必須符合以下幾個條件 現在智乃有乙個長度大小為 的字串 她想知道s串中有多少個子串是乙個符合條件的密碼,請你幫助智乃統計符合條件的密碼數目。子串是指字串中某一段連續的區間,例如對於字串 abcde 來說,abc cde 都是它的子串,而 ace 不是它的子串。第一行輸...

《2022牛客寒假演算法基礎集訓營3》

c 首先我們可以知道重量為1的方案數就是重量為2的物品的數量,因為只有2 2 1可以影響它。那麼如果我們從小到大迭代的話,對於當前位置i,只能賦值2 i才能影響當前位置,那麼如果當前方案數的差為d,那麼就還需要放d個2 i。這裡要注意的是差值可能為負數。includeusing namespace ...

2022牛客寒假演算法基礎集訓營1

揹包 分塊,預處理每個塊以 0 1 2 的分數進入時出來後的分數是多少 看了題解發現可以用分塊思想倍增,複雜度優化成 nlogn 模擬題,就不說了 求 h x frac 考慮 phi x x prod frac 則 h x prod frac 則問題一是 2 3 5 7 問題二是 2,n 中最大的素...