国庆总结
day1
hyw超绝模考,惊世骇俗,梦熊熊S4>HNOI2025无法战胜,青紫黑黑
T1:我是镁条我是区,考虑直伤直接推式子
考试结束前0.1s一定不要改代码!
code
#include<bits/stdc++.h>
using namespace std;
#define int long long
int fac[1145141];
int n,k,p;
int qpow(int x,int y){
int res=1;
while(y){
if(y&1){
res*=x;
res%=p;
}x*=x;
x%=p;
y>>=1;
}return res%p;
}
signed main(){
freopen("prefixsort.in","r",stdin);
freopen("prefixsort.out","w",stdout);
int t;
cin>>t;
int cnt=1;
while(t--){
cin>>n>>k>>p;fac[0]=1;
k=min(n,k);
for(int i=1;i<=1145;i++){
fac[i]=fac[i-1]*i%p;
}
cout<<"Case #"<<cnt<<": "<<(fac[k]*((n-k)%p*(n-1)%p+1))%p<<endl;
cnt++;
}
}
T2:我会前缀和卷积,直接前缀和卷积优化前缀和求和,注意到题目中可以看成一个类似在一个二叉树上插链的操作,简单放两下组合计数闪击掉
code
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool check(char s){
return s<='9'&&s>='0';
} bool check2(char s){
return (s=='+')||(s=='-')||(s=='*')||(s=='/');
}bool check3(char s){
return (s=='+')||(s=='-');
}vector<int>st;
bool flag;
void zhazhashi(string s){
int i=0;
while(!check(s[i])){
if(i>=s.size()){
flag=0;
cout<<0<<endl;
return;
}else if(!check3(s[i])){
flag=0;
cout<<0<<endl;
return;
}
i++;
}st.push_back(i);
while(i<s.size()){
if(!check(s[i])){
flag=0;
cout<<0<<endl;
return;
}
while(check(s[i])&&i<s.size()){
i++;
}
if(i==s.size()){
break;
}
if(!check2(s[i])){
flag=0;
cout<<0<<endl;
return;
}
i++;
int cnt=0;
while(!check(s[i])){
if(i>=s.size()){
flag=0;
cout<<0<<endl;
return;
}else if(!check3(s[i])){
flag=0;
cout<<0<<endl;
return;
}
cnt++;
i++;
}st.push_back(cnt);
if(i==s.size()){
flag=0;
cout<<0<<endl;
return;
}
}
}int qpow(int x,int y){
int res=1;
while(y){
if(y&1){
res*=x;
res%=1000003;
}x*=x;
x%=1000003;
y>>=1;
}return res%1000003;
}int dp[2][1145141]={0};
signed main(){
freopen("expression.in","r",stdin);
freopen("expression.out","w",stdout);
string s;
cin>>s;flag=1;
zhazhashi(s);
if(flag){
dp[0][1]=1;
for(int i=0;i<st.size();i++){
for(int j=0;j<=st[i];j++){
for(int k=1;k<=st.size();k++){
dp[0][k]+=dp[0][k-1];
dp[0][k]%=1000003;
}
}
for(int j=0;j<=st.size()+113;j++){
dp[1][j]=0;
}
if(i==st.size()-1){
cout<<dp[0][1]<<endl;
}
for(int j=1;j<=st.size()-i-1;j++){
dp[1][j]=dp[0][j+1];
}for(int j=0;j<=st.size();j++){
dp[0][j]=dp[1][j];
}
}
}
}
T3:黑题10分我真厉害
day 2
拉完了,100严肃离场
T1忘了:水,贪心
T2管道取珠:这期神了,管道取珠考虑现在是那个人在选总共选了几个美美得吃,脑子有问题啊我
T3:冰火战士,带修莫队或三分温度+树状数组或二分贡献+树状数组或李超树维护斜率好像都可做,甚至还有根据一个战士的属性对答案曲线进行加减贡献然后用线段树维护就能反向离线做,把七七八八的一大堆算法结合一下然后大部分都是离线看力竭了
T4:移球游戏,貌似是子问题分治qwq
不要在机房打游戏,会死
day 3
真可爱的一天
T1:小滚木100水掉
T2:字符串,雷霆dp,但是我根本不会dp,怎办?
考虑对于最小循环节分块,设最小循环节的定义为能拓展至少1次且长度最小的字符串,则最小循环节一定形如AAA……AC中A的部分,则所有A的部分的长度的因数,那么对于k所在的串不包含循环段的产生循环段的贡献,否则就是普通贡献,然后秒了
\(O(n+\sqrt n \log_2^2 n +\frac{\sqrt \frac{n\log_2 n}{2} } {D} )\) 其中 \(D\) 为最小循环节长度
T3:雷霆大DP,讲了,很难不好做,但是实际上是维护dp,维护进位个数和1的个数即可
T4:队列,我会平推树,平推树暴力维护修改即可
请不要查找哈希模数的时候查找文件内容并替换
day 4
不要相信mac测的点
不要相信样例说的话
T1:暴力合并双指针即可 \(O(n+m)\)
T2: 线性维护即可,枚举结束天数(全部发布),考虑对于操作1,如果使用一次则一定使用多次,并且如果操作1将一个考试的公布时间超过了结束天数一定不优,就有 \(O(2*n+m)\) 的线性水过去,easy(孩子们我是ull,我要把所有没有仔细分析数据范围的小朋友们打死)
T3:注意到结束后是个基环树森林啊,那么直接找到取反赋值边为奇数的基环树统计大小,然后存在U的也统计大小即可
T4:拉完了,什么鬼脑题目,天天爱打卡,神秘大DP

浙公网安备 33010602011771号