AtCoder Grand Contest 030 自閉記
阿新 • • 發佈:2018-12-30
res ati coder ont span tex long long spl pla
A:閱讀。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long char getc(){char c=getchar();while ((c<‘A‘||c>‘Z‘)&&(c<‘a‘||c>‘z‘)&&(c<‘View Code0‘||c>‘9‘)) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1;c=getchar();} while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } inta,b,c; int main() { a=read(),b=read(),c=read(); cout<<b+min(c,a+b+1); return 0; }
B:一個顯然的做法是設f[i][j][0/1]為已經砍掉了1~i和j~n的樹且停在左/右邊的最長路,類似區間dp轉移即可。因為開始頭鐵想了會正解和初始化出了些鍋,很久之後才過掉這個部分分。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #includeView Code<cstring> #include<algorithm> using namespace std; #define ll long long #define N 200010 char getc(){char c=getchar();while ((c<‘A‘||c>‘Z‘)&&(c<‘a‘||c>‘z‘)&&(c<‘0‘||c>‘9‘)) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1;c=getchar();} while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int n,m,a[N]; ll ans,f[2010][2010][2]; int main() { m=read(),n=read(); for (int i=1;i<=n;i++) a[i]=read();a[n+1]=m; memset(f,200,sizeof(f)); f[1][n+1][0]=a[1],f[0][n][1]=m-a[n]; for (int i=2;i<=n;i++) for (int j=0;j<=i;j++) { if (j) f[j][n+1-(i-j)][0]=max(f[j-1][n+1-(i-j)][0]+a[j]-a[j-1],f[j-1][n+1-(i-j)][1]+a[j]+m-a[n+1-(i-j)]); if (j<i) f[j][n+1-(i-j)][1]=max(f[j][n+2-(i-j)][1]+a[n+2-(i-j)]-a[n+1-(i-j)],f[j][n+2-(i-j)][0]+a[j]+m-a[n+1-(i-j)]); } for (int i=1;i<=n;i++) ans=max(ans,f[i][i+1][0]),ans=max(ans,f[i][i+1][1]); cout<<ans; return 0; }
然後因為一些原因也沒什麽心思想題,就這麽心態平穩地自閉到結束了。根本沒臉寫這玩意了題過會再補
result:rank 312 rating +56 怎麽打成什麽樣都漲分啊?
AtCoder Grand Contest 030 自閉記