AtCoder Beginner Contest 129
生活随笔
收集整理的這篇文章主要介紹了
AtCoder Beginner Contest 129
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
ABCD
簽到(A、B、C過水已隱藏)
#include<bits/stdc++.h> using namespace std; const int N=2003; int n,m,ans,f1[N][N],f2[N][N],f3[N][N],f4[N][N]; char mp[N][N]; int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%s",mp[i]+1);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]=='.')f1[i][j]=f1[i-1][j]+1,f2[i][j]=f2[i][j-1]+1;for(int i=n;i;i--)for(int j=m;j;j--)if(mp[i][j]=='.')f3[i][j]=f3[i+1][j]+1,f4[i][j]=f4[i][j+1]+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]=='.')ans=max(ans,f1[i][j]+f2[i][j]+f3[i][j]+f4[i][j]-3);printf("%d\n",ans); } View CodeE
發(fā)現(xiàn)x^y=x+y時,x,y沒有同時為1的位。于是數(shù)位DP,f[i][0/1]表示到了第i位是否達(dá)到上限,發(fā)現(xiàn)該位取1有2種方案,取0有1種,大力O(n)DP即可。
#include<bits/stdc++.h> using namespace std; const int N=1e5+7,mod=1e9+7; int n,ans,f[N][2]; char s[N]; int main() {scanf("%s",s+1);n=strlen(s+1);f[0][1]=1;for(int i=1;i<=n;i++)if(s[i]=='1')f[i][0]=(3ll*f[i-1][0]+f[i-1][1])%mod,f[i][1]=2ll*f[i-1][1]%mod;else f[i][0]=3ll*f[i-1][0]%mod,f[i][1]=f[i-1][1];ans=(f[n][0]+f[n][1])%mod;printf("%d",ans); } View CodeF
設(shè)計(jì)算到x時,答案是ans,于是計(jì)算x后,ans=(ans*10i+x)%m,其中i為x的位數(shù),然后發(fā)現(xiàn)這個可以矩陣轉(zhuǎn)移,對于位數(shù)相同的數(shù)字,轉(zhuǎn)移的矩陣是相同的,于是分位數(shù)轉(zhuǎn)移至多18次即可,復(fù)雜度O(27logBLlgBL)。
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll L,st,ed,b,pw[19]; int m,ans; struct mat{int a[3][3];mat(){memset(a,0,sizeof a);}void init(int i){memset(a,0,sizeof a);a[0][0]=pw[i]%m,a[1][0]=a[1][1]=a[2][1]=a[2][2]=1;} }A,ret; mat operator*(mat a,mat b) {mat c;for(int i=0;i<3;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%m;return c; } int solve(ll L,ll R,int id) {ll n=(R-L)/b+1;for(int i=0;i<3;i++)for(int j=0;j<3;j++)ret.a[i][j]=i==j;A.init(id);while(n){if(n&1)ret=ret*A;A=A*A,n>>=1;}ans=(1ll*ans*ret.a[0][0]+L%m*ret.a[1][0]+b%m*ret.a[2][0])%m; } int main() {pw[0]=1;for(int i=1;i<=18;i++)pw[i]=pw[i-1]*10;cin>>L>>st>>b>>m;ed=st+b*(L-1);for(int i=1;i<=18;i++)if(st<pw[i]){ll R=(pw[i]-1-st)/b*b+st;if(R>ed)R=ed;solve(st,R,i);if(R==ed)break;st=R+b;}cout<<ans<<endl; } View Coderesult:rank5 rating+=65 now_rating=2020,ABC為什么performance上限要設(shè)2400?就漲了這么點(diǎn)……不過好在上黃了。
轉(zhuǎn)載于:https://www.cnblogs.com/hfctf0210/p/10995140.html
總結(jié)
以上是生活随笔為你收集整理的AtCoder Beginner Contest 129的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: adb 操作安卓模拟器--备忘
- 下一篇: 查找nginx安装的路径以及相关安装操作