賽場上完成度: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 中最大的素...