A - 369

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 
int main()
{
//	freopen("A.in","r",stdin);
//	freopen(".out","w",stdout);
	int a,b,c;
	cin>>a>>b;
	int an=0;
	if(a==b) an=1;
	else {
		if((a+b)%2==0) ++an;
		an+=2;
	}cout<<an;
	
	
	return 0;
}

B - Piano 3

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 
int a[101];
string s[101];
int f[101][101][101]={};
int main()
{
//	freopen("B.in","r",stdin);
//	freopen(".out","w",stdout);
	int n=read(),pl=-1,pr=-1,x=0;
	For(i,n) {
		cin>>a[i]>>s[i];
		if(s[i][0]=='L') {
			x+=(pl==-1)?0:abs(pl-a[i]);
			pl=a[i];
		}
		else {
			x+=(pr==-1)?0:abs(pr-a[i]);
			pr=a[i];
			
		}
	}
	cout<<x;	
	return 0;
}

C - Count Arithmetic Subarrays

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 
int a[200000+10];
int main()
{
//	freopen("C.in","r",stdin);
//	freopen(".out","w",stdout);
	int n=read();
	For(i,n) a[i]=read();
	For(i,n-1) a[i]=a[i+1]-a[i];
	ll ans=n;
	ll x=1;
	For(i,n-1) {
		if(i>1&&a[i]==a[i-1]) ++x,ans+=x;
		else x=1,ans++;
	}
	cout<<ans;
	return 0;
}

D - Bonus EXP

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 
int a[200000+10];
ll f[200000+10][2];
int main()
{
//	freopen(".out","w",stdout);
	int n=read();
	For(i,n) a[i]=read();
	f[0][0]=-1e18;f[0][1]=0;
	For(i,n) {
		f[i][0]=max(f[i-1][0],f[i-1][1]+a[i]);
		f[i][1]=max(f[i-1][1],f[i-1][0]+2ll*a[i]);
	}
	cout<<max(f[n][0],f[n][1]);
	
	
	
	return 0;
}

E - Sightseeing Tour

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 
int n;
#define MAXN (410)
#define MAXM (200000+10)
ll u[MAXM],v[MAXM],w[MAXM];
ll f[MAXN][MAXN]={};

int main()
{
//	freopen("E.in","r",stdin);
//	freopen(".out","w",stdout);
	int n=read(),m=read();
	For(i,n) For(j,n) f[i][j]=1e18;
	For(i,n) f[i][i]=0;
	For(i,m){
		cin>>u[i]>>v[i]>>w[i];
		gmin(f[u[i]][v[i]],w[i])
		gmin(f[v[i]][u[i]],w[i])
	}
	For(k,n) For(i,n) For(j,n) gmin(f[i][j],f[i][k]+f[k][j])
	int q=read();
	while(q--) {
		int k=read(),S=1<<k;
		vi ve;
		Rep(c,k) ve.pb(read());
		vi p;
		Rep(c,k) p.pb(c);
		ll ans=1e18;
		do{
			Rep(st,S){
				int now=1;ll tmp=0;
				Rep(c,k) {
					int id =ve[p[c]];
					if((st>>c)&1) {
						tmp+=f[now][u[id]];now=v[id];
					}
					else {
						tmp+=f[now][v[id]];now=u[id];
					}		
					tmp+=w[id];		
				}
				tmp+=f[now][n];
				gmin(ans,tmp)
			}
		}while(next_permutation(ALL(p)));
		cout<<ans<<endl;
	}
	
	return 0;
}

F - Gather Coins

H*W的棋盘上有n个硬币。从(1,1)开始每次只能向右或向下走走到(H,W),问最多经过几个硬币。
线段树板子题

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 
int n;


const int maxn =300000+10;
pi v[maxn];
pair<int,int> g[maxn<<2];
void pushup(int o) {
	g[o]=max(g[Lson],g[Rson]);
}
void build(int l,int r,int o) {
	if (l==r) {
		g[o]={0,0};	return ;
	}
	int m=(l+r)>>1;
	build(l,m,Lson),build(m+1,r,Rson);
	pushup(o);
}
void update(int l,int r,int o,int p,pi v) {
	if (l==r) {
		g[o]=max(g[o],v);  return;
	}
	int m=(l+r)>>1;
	if (p<=m) update(l,m,Lson,p,v); 
	else update(m+1,r,Rson,p,v);
	pushup(o);
}
pi query(int l,int r,int o,int L,int R) {
	if(L<=l && r<=R ) return g[o];
	int m=(l+r)>>1;
	pi ret={0,0};
	if(L<=m) gmax(ret,query(l,m,Lson,L,R));
	if(m<R) gmax(ret,query(m+1,r,Rson,L,R)); 
	return ret;
}
pi an[maxn];
int main()
{
//	freopen("F.in","r",stdin);
//	freopen(".out","w",stdout);
	int h=read(),w=read(),n=read();
	For(i,n){
		v[i].fi=read();
		v[i].se=read();
	}
	sort(v+1,v+1+n);
	For(i,n) {
		int r=v[i].fi,c=v[i].se;
		an[i]=mp(1,0);
		auto p=query(1,200000,1,1,c);
		an[i]=max(an[i],mp(p.fi+1,p.se));
		update(1,200000,1,c,mp(an[i].fi,i));
	}
	int ans=-1,id=-1;
	For(i,n) if(an[i].fi>=ans) ans=an[i].fi,id=i;
	cout<<ans<<endl;
	vector<pi > st;
	st.pb(mp(h,w));
	while(id){
		st.pb(v[id]);
		id=an[id].se;
	}
	st.pb(mp(1,1));
	reverse(ALL(st));
	int x=1,y=1;
	for(auto p:st){
		int nx=p.fi,ny=p.se;
		For(i,nx-x) cout<<'D';
		For(i,ny-y) cout<<'R';
		x=nx,y=ny;
	}
	return 0;
}

G - As far as possible

给1个点数为AtCoder Beginner Contest 369 题解_算法的有边权的树,根为1,对于每个AtCoder Beginner Contest 369 题解_树dp_02,选出AtCoder Beginner Contest 369 题解_树dp_03个节点,计算一条从根开始计划经过所有给定节点至少一次后回到原点的最小路径长度AtCoder Beginner Contest 369 题解_c++_04。选点的策略为让最小路径长度尽量大。求每个AtCoder Beginner Contest 369 题解_树dp_03对应的最小路径长度。
结论:AtCoder Beginner Contest 369 题解_算法_06
因此,可以每次取走根节点向下的最长链。删除链,剩余的连通块继续做,直到取走所有边。
dp求出每个节点的向下到根的最长链。每次把除最大值外的所有相邻子节点的最优值加入dp数组。

#include<bits/stdc++.h> 
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i>0;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int> 
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,cal) printf("Case #%d: %lld\n",kcase,cal);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
						For(j,m-1) cout<<a[i][j]<<' ';\
						cout<<a[i][m]<<endl; \
						} 
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define add(a,b) ((a+b)%F)
ll mul(ll a,ll b){return (a*b)%F;}
inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
	while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
	return x*f;
} 

#define MAXN (212345)
vector<pair<int,ll> > v[MAXN];
vector<ll> dp;
ll dfs(int x,int fa)  {
        ll mx=0;
        for (auto e : v[x]) if (e.fi^fa){
    		auto tmp = dfs(e.fi,x)+e.se;
           	dp.pb(min(mx,tmp));
			mx=max(mx,tmp);	
        }
        return mx;
    };
int main()
{
//	freopen("c.in","r",stdin);
//	freopen(".out",w",stdout);
	int n=read();
	For(i,n-1) {
		int x=read(),y=read(),w=read();
		v[x].pb(mp(y,w)); v[y].pb(mp(x,w));
	}
	dp.pb(dfs(1,-1));
	sort(ALL(dp));
	reverse(ALL(dp));
	ll x=0;
	Rep(i,n) {
		x+=dp[i]*2;
		cout<<x<<endl;
	}
	
	return 0;
}