牛客练习赛 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.操作集錦
菜菜不會啊啊啊
大佬題解
狀態(tài)表示:f(i,j)f_{(i,j)}f(i,j)?表示考慮前iii個字符,長度是jjj的不重復(fù)子序列的個數(shù)
狀態(tài)轉(zhuǎn)移:對于第iii個字符,有兩種選擇,如果不選擇方案數(shù)是f(i?1,j)f_{(i-1,j)}f(i?1,j)?,如果選擇方案數(shù)是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?出現(xiàn)的位置
看了這個方法越想越覺得妙,所以所以我不想啦hhhh
還有一種序列自動機的做法,沒學(xué)過,回來補一下。
學(xué)習(xí)序列自動機了,發(fā)現(xiàn)上述dp是顯然的,我還是見的題太少了~~刷著題補著吧
狀態(tài)表示:f(i,j)f_{(i,j)}f(i,j)?表示以iii結(jié)尾的子序列并且長度是jjj
狀態(tài)轉(zhuǎn)移:借助序列自動機找出第一次出現(xiàn)的子序列
D.斬殺線計算大師
根據(jù)擴展歐幾里得算法很容易求出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,那么問題就轉(zhuǎn)化為對于ax+by=k?czax+by=k-czax+by=k?cz對于x,yx,yx,y是否有非負整數(shù)解。
#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.旗鼓相當?shù)膶κ?/h3>
感覺最近有的浮躁,找了幾首輕音樂希望能夠讓我浮躁的心平靜下來,而且最近學(xué)校破事賊多,人快無了。
要加油哦~
總結(jié)
以上是生活随笔為你收集整理的牛客练习赛 60(待补E-长链剖分或者dsu)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苏秦之楚翻译 苏秦之楚原文
- 下一篇: 造梦西游3仙音岛怎么过 全职业必过打法解