日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客练习赛 60(待补E-长链剖分或者dsu)

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客练习赛 60(待补E-长链剖分或者dsu) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A.大吉大利

位運算有獨立性,按位計算對答案的貢獻即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef unsigned long long ull; const int N=1000010; int cnt[40],n; ll a[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];for(int j=0;j<30;j++)if(a[i]>>j&1) cnt[j]++;}ll res=0;for(int i=1;i<=n;i++){for(int j=0;j<30;j++)if(a[i]>>j&1) res+=(1ll<<j)*cnt[j];}cout<<res<<'\n'; }return 0; }

B.三角形周長和

不難分析出一條邊會被n?2n-2n?2個三角形公用,因此求出任意兩點的曼哈頓路徑?(n?2)(n-2)(n?2)即可得出所有三角形周長和,過程中取模即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> #define x first #define y second using namespace std; typedef pair<int,int> pii; const int N=1010; pii p[N]; int n; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>p[i].x>>p[i].y;ll res=0;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){ll dx=abs(p[i].x-p[j].x);ll dy=abs(p[i].y-p[j].y);res=(res+dx+dy)%mod;}res=res*(n-2)%mod;cout<<res<<'\n';}return 0; }

C.操作集錦

菜菜不會啊啊啊
大佬題解
狀態表示:f(i,j)f_{(i,j)}f(i,j)?表示考慮前iii個字符,長度是jjj的不重復子序列的個數
狀態轉移:對于第iii個字符,有兩種選擇,如果不選擇方案數是f(i?1,j)f_{(i-1,j)}f(i?1,j)?,如果選擇方案數是f(i?1,j?1)?f(k?1,j?1)f_{(i-1,j-1)}-f_{(k-1,j-1)}f(i?1,j?1)??f(k?1,j?1)?kkk是在iii之前最后一次sis_isi?出現的位置
看了這個方法越想越覺得妙,所以所以我不想啦hhhh

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N=1010; const ll mod=1e9+7; ll f[N][N]; int pre[30]; int n,m; char s[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>m;cin>>s+1;for(int i=0;i<=n;i++) f[i][0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){f[i][j]=f[i-1][j]+f[i-1][j-1];if(pre[s[i]-'a']) f[i][j]-=f[pre[s[i]-'a']-1][j-1];f[i][j]%=mod;}pre[s[i]-'a']=i;}cout<<(f[n][m]%mod+mod)%mod<<'\n';}return 0; }

還有一種序列自動機的做法,沒學過,回來補一下。
學習序列自動機了,發現上述dp是顯然的,我還是見的題太少了~~刷著題補著吧

狀態表示:f(i,j)f_{(i,j)}f(i,j)?表示以iii結尾的子序列并且長度是jjj
狀態轉移:借助序列自動機找出第一次出現的子序列

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N=1010; const ll mod=1e9+7; ll f[N][N]; int ne[N][30]; int n,m; char s[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>m;cin>>s+1;for(int i=n;i;i--){for(int j=0;j<26;j++)ne[i-1][j]=ne[i][j];ne[i-1][s[i]-'a']=i;}f[0][0]=1;for(int i=0;i<=n;i++)for(int j=0;j<=min(m,i);j++)for(int k=0;k<26;k++)if(ne[i][k]) f[ne[i][k]][j+1]=(f[ne[i][k]][j+1]+f[i][j])%mod;ll res=0;for(int i=m;i<=n;i++) res=(res+f[i][m])%mod;cout<<res<<'\n';}return 0; }

D.斬殺線計算大師

根據擴展歐幾里得算法很容易求出ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b),由于本題需要求ax+by+cz=kax+by+cz=kax+by+cz=k考慮枚舉zzz,那么問題就轉化為對于ax+by=k?czax+by=k-czax+by=k?cz對于x,yx,yx,y是否有非負整數解。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; ll exgcd(ll a,ll b,ll &x,ll &y) {if(b==0){x=1,y=0;return a;}ll d=exgcd(b,a%b,y,x);y-=a/b*x;return d; } int main() {IO;int T=1;//cin>>T;while(T--){ll a,b,c,k;cin>>a>>b>>c>>k;for(int z=0;z*c<=k;z++){ll x,y;ll d=exgcd(a,b,x,y);if((k-z*c)%d==0){ll gcd=b/d;x=((k-z*c)/d*x%gcd+gcd)%gcd;y=(k-z*c-x*a)/b;if(x>=0&&y>=0) {cout<<x<<' '<<y<<' '<<z<<'\n';break;}}}}return 0; }

E.旗鼓相當的對手

感覺最近有的浮躁,找了幾首輕音樂希望能夠讓我浮躁的心平靜下來,而且最近學校破事賊多,人快無了。
要加油哦~

總結

以上是生活随笔為你收集整理的牛客练习赛 60(待补E-长链剖分或者dsu)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。