20230426-未知
题
P5055 【模板】可持久化文艺平衡树
写的 fhq 字面意义上的 可持久化 + 文艺平衡树。
写一下傻逼错误
- 查询操作完不 merge
- split 操作把剩下的 siz 传错了
- 强制在线不一定在 int 范围内 - 答案是 ll 的时候为了把他异或到下表里去会用 ll 输入
- pushdown 要注意不能直接打 tag 要判断一下有没有,要不然会对可持久化有影响
- merge 误把 val 当成 key
- 调强制在线题先扒掉强制在线再调,要不然输入就是一坨屎
写了 1h 调了四五个小时。还是太傻逼了。
// Problem: P5055【模板】可持久化文艺平衡树
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5055
// Memory Limit: 1 MB
// Time Limit: 2500 ms
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
#define ll long long
#define int long long
int n,m;ll lastans;
int root[N],cnt;
struct node{int l,r,val,key,tag,siz;ll sum;}a[N*10];
int newnode(int val){
a[++cnt]=(node){0,0,val,rand(),0,1,val};return cnt;
}
int copynode(int pre){
a[++cnt]=a[pre];
return cnt;
}
#define l(p) a[p].l
#define r(p) a[p].r
#define val(p) a[p].val
#define siz(p) a[p].siz
#define sum(p) a[p].sum
#define tag(p) a[p].tag
void pushup(int p){
sum(p)=sum(l(p))+sum(r(p))+val(p);
siz(p)=siz(l(p))+siz(r(p))+1;
return ;
}
void pushdown(int p){
if(!tag(p)) return ;
if(l(p)) l(p)=copynode(l(p));
if(r(p)) r(p)=copynode(r(p));
swap(l(p),r(p));
if(l(p)) tag(l(p))^=1;
if(r(p)) tag(r(p))^=1;
tag(p)=0;
return ;
}
void split(int p,int s,int &l,int &r){
if(!p) {l=r=0;return;}
pushdown(p);
if(a[a[p].l].siz<s){
l=copynode(p);
split(a[l].r,s-a[a[p].l].siz-1,a[l].r,r);
pushup(l);
}
else{
r=copynode(p);
split(a[r].l,s,l,a[r].l);
pushup(r);
}
}
int merge(int l,int r){
if(!l||!r) return (l+r);
pushdown(l),pushdown(r);
if(a[l].key<a[r].key){
a[l].r=merge(a[l].r,r);pushup(l);return l;
}
else{
a[r].l=merge(l,a[r].l);pushup(r);return r;
}
}
signed main(){
srand(114514453);
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
int op,ver;
cin>>ver>>op;
if(op==1){
int pos,x,l,r;cin>>pos>>x;pos^=lastans,x^=lastans;
split(root[ver],pos,l,r);
int tmp=newnode(x);
root[i]=merge(merge(l,tmp),r);
}
else if(op==2){
int pos,x,y,z;
cin>>pos;pos^=lastans;
split(root[ver],pos,x,y);
split(x,pos-1,x,z);
root[i]=merge(x,y);
}
else if(op==3){
int l,r,x,y,z;
cin>>l>>r;
l^=lastans,r^=lastans;
split(root[ver],r,y,z);
split(y,l-1,x,y);
a[y].tag^=1;
root[i]=merge(merge(x,y),z);
}
else {
int l,r,x,y,z;
cin>>l>>r;
l^=lastans,r^=lastans;
split(root[ver],r,y,z);
split(y,l-1,x,y);
lastans=a[y].sum;
cout<<lastans<<endl;
root[i]=merge(merge(x,y),z);
}
}
return 0;
}
P4195 【模板】扩展 BSGS/exBSGS
p 不是质数就多了一个转化操作。先让 a,p 互质。就是找最大公约数然后搞下去。这样就是普通的 BSGS 板子了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,p,n;
map<int,int> mp;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int BSGS(int a,int n,int p,int ad){
mp.clear();
int m=ceil(sqrt(p));
int s=1;
for(int i=0;i<m;i++,s=s*a%p) mp[s*n%p]=i;
for(int i=0,tmp=s,s=ad;i<=m;i++,s=s*tmp%p){
if(mp.find(s)!=mp.end()){
if(m*i-mp[s]>=0) return m*i-mp[s];
}
}
return -1;
}
int exBSGS(int a,int n,int p)
{
a%=p,n%=p;
if(n==1||p==1)return 0;
int cnt=0;
int d=gcd(a,p),ad=1;
while(d!=1){
if(n%d) return -1;
cnt++;
n/=d;
p/=d;
ad=ad*a/d%p;
if(ad==n)return cnt;
d=gcd(a,p);
}
int ans=BSGS(a,n,p,ad);
if(ans==-1) return -1;
return ans+cnt;
}
signed main(){
while(scanf("%lld%lld%lld",&p,&a,&n)!=EOF){
int ans=exBSGS(a,n,p);
if(ans!=-1) printf("%lld\n",ans);
else puts("no solution");
}
return 0;
}
P3713 [BJOI2017]机动训练
说实话看了很久才看懂这个 sb 题。
首先题意转化,把题意 转化成两个人走同样的路径的方案数。
题中限制了最短路径,就是说每个人最多有三种方向可以走。我们首先枚举每个人的方向是什么,然后枚举两个人的起点。 表示两个人从这个坐标开始的方案数,用记搜求解就可以。
求完某些方向之后可以存起来,正走反走是相同的就不用算两次了。
对不起 code 太丑了
//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
int n,m;
#define ll long long
#define int long long
const int N=32,mod=1000000009;
int dp[N][N][N][N],f[5][5][5][5];
char s[N][N];
vector<pair<int,int> >a,b;
int DP(int xx1,int yy1,int xx2,int yy2){
if(s[xx1][yy1]!=s[xx2][yy2]) return 0;
if(xx1<1||xx1>n||yy1<1||yy1>m||xx2<1||xx2>n||yy2<1||yy2>m)return 0;
if(~dp[xx1][yy1][xx2][yy2]) return dp[xx1][yy1][xx2][yy2];
int ans=1;
for(auto i:a){
for(auto j:b){
int dxx1=i.first,dyy1=i.second,dxx2=j.first,dyy2=j.second;
ans=(ans+DP(xx1+dxx1,yy1+dyy1,xx2+dxx2,yy2+dyy2))%mod;
}
}
// cout<<ans<<endl;
return dp[xx1][yy1][xx2][yy2]=ans;
}
int dfs(int xx1,int yy1,int xx2,int yy2){
if(~f[xx1+1][yy1+1][xx2+1][yy2+1]) return f[xx1+1][yy1+1][xx2+1][yy2+1];
a.clear(),b.clear();
for(int i=-1;i<=1;i++)if((!i)||i==xx1)for(int j=-1;j<=1;j++) if((i||j)&&((!j)||j==yy1)) a.emplace_back(make_pair(i,j));
for(int i=-1;i<=1;i++)if((!i)||i==xx2)for(int j=-1;j<=1;j++) if((i||j)&&((!j)||j==yy2)) b.emplace_back(make_pair(i,j));
memset(dp,-1,sizeof(dp));
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int ii=1;ii<=n;ii++)
for(int jj=1;jj<=m;jj++)
ans=(ans+DP(i,j,ii,jj))%mod;
f[xx1+1][yy1+1][xx2+1][yy2+1]=f[xx2+1][yy2+1][xx1+1][yy1+1]=f[-xx1+1][-yy1+1][-xx2+1][-yy2+1]=f[-xx2+1][-yy2+1][-xx1+1][-yy1+1]=ans;
return ans;
}
int calc(int x,int y){
int ans=0;
ans+=dfs(x,y,1,1);
// cout<<ans<<endl;
ans+=dfs(x,y,1,-1);
ans%=mod;
ans+=dfs(x,y,-1,-1);
ans%=mod;
ans+=dfs(x,y,-1,1);
ans%=mod;
ans-=dfs(x,y,0,1);
ans%=mod;ans+=mod;ans%=mod;
ans-=dfs(x,y,1,0);
ans%=mod;ans+=mod;ans%=mod;
ans-=dfs(x,y,0,-1);
ans%=mod;ans+=mod;ans%=mod;
ans-=dfs(x,y,-1,0);
ans%=mod;ans+=mod;ans%=mod;
return ans;
}
signed main(){
scanf("%d%d",&n,&m);
memset(f,-1,sizeof(f));
for(int i=1;i<=n;i++)scanf("%s",s[i]+1);
int ans=0;
ans+=calc(1,1);
ans+=calc(1,-1);
ans+=calc(-1,-1);
ans+=calc(-1,1);
ans%=mod;
ans-=calc(1,0);
ans%=mod;ans+=mod;ans%=mod;
ans-=calc(-1,0);
ans%=mod;ans+=mod;ans%=mod;
ans-=calc(0,1);
ans%=mod;ans+=mod;ans%=mod;
ans-=calc(0,-1);
ans%=mod;
ans+=mod;
ans%=mod;
cout<<ans;
return 0;
}
AT DP contest
闲话
全是没营养的废话但是不发这个癫我难受啊!负能量预警
清北营没过,很崩溃,不想去机房。感觉要退役了,发了一段很傻逼的文字。
呜,原来真的有人会安慰我啊......
真的会有人在乎我啊
真的 非常感谢。
但是感觉还是好崩溃啊。
不过我喜欢 zah 的小裙子!太好看了想草
感觉 还是先准备考试吧(崩溃)
感觉最近这么累的原因是因为好久都没睡好觉了......
上次睡懒觉在 4.10
相当于回去 whk 之后一天都没休息过。
感觉要死了。
他妈的还我周日。
有一种活不动了的美
感觉精神状态有点像祥林嫂。。
眼神空洞,面色青黄。
身边一群人中度抑郁中度焦虑重度抑郁,希望我能挺到大学。/cy
怎么说呢好崩溃好崩溃好崩溃。
要是自己的 blog 都不能破防那大概不用活了。
想看 Call Me By Your Name 想看 Merry Christmas Mr. Lawrence。似乎了解到了卡罗尔?呜呜 想看。
这是前几天 da 给我讲的电影啊。不知道他现在怎么样了啊。
绷不住了
精神状态太不稳定了。。。
感觉真要抑郁了啊。。。
大概是坚定信念一类的话语,好像真正努力之后无论成败都心服口服了呢。
过程真的比结果更重要吗。
或者说,我失去了什么,我得到了什么。平衡一下就好像很简单了呢。
上不起 XX 学校不能成为考不上的理由,这样别人会认为你是个死鸭子嘴硬的傻逼,港大多好的学校啊。
肯定有办法的,不是吗。
从期望上来说肯定是学 whk 更好不是吗。
我真的喜欢 OI 吗?
我为什么喜欢 OI 呢?
呜喵
感觉自己像个愚蠢的小丑,不想写 noi 抄代码抄累了。
既然是四月份小记就让他在四月结束吧。
本文作者:洛浔
本文链接:https://www.cnblogs.com/Artemis-lx/p/17360404.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步