1. 程式人生 > >AtCoder Grand Contest 030 自閉記

AtCoder Grand Contest 030 自閉記

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<
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
a,b,c; int main() { a=read(),b=read(),c=read(); cout<<b+min(c,a+b+1); return 0; }
View Code

  B:一個顯然的做法是設f[i][j][0/1]為已經砍掉了1~i和j~n的樹且停在左/右邊的最長路,類似區間dp轉移即可。因為開始頭鐵想了會正解和初始化出了些鍋,很久之後才過掉這個部分分。

技術分享圖片
#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include
<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; }
View Code

  然後因為一些原因也沒什麽心思想題,就這麽心態平穩地自閉到結束了。根本沒臉寫這玩意了題過會再補

  result:rank 312 rating +56 怎麽打成什麽樣都漲分啊?

AtCoder Grand Contest 030 自閉記