A Edge Checker
#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;
cin>>a>>b;
bool fl=((a+1)%10==b%10)||((b+1)%10==a%10);
puts(fl?"Yes":"No");
return 0;
}
B Count Distinct Integers
#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("B.in","r",stdin);
// freopen(".out","w",stdout);
int n=read();
vector<int>a;
For(i,n) a.pb(read());
sort(ALL(a));
int m=unique(a.begin(),a.end())-a.begin();
cout<<m<<endl;
return 0;
}
C Jumping Takahashi
背包
#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 v[10001],f[10010];
int main()
{
// freopen("C.in","r",stdin);
// freopen(".out","w",stdout);
int n=read(),X=read();
For(i,n) {
int a=read(),b=read();
if(a>b) swap(a,b);
X-=a,b-=a;v[i]=b;
}
f[0]=1;
if(X<0) puts("No");
else {
For(i,n) {
RepD(j,X-v[i]) f[j+v[i]]|=f[j];
}
puts(f[X]?"Yes":"No");
}
return 0;
}
D Strange Balls
#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("D.in","r",stdin);
// freopen(".out","w",stdout);
int n=read();
stack<pair<int,int> > st;
int tot=0;
For(i,n) {
int x=read();
++tot;
if(!st.empty() && st.top().fi==x) {
auto p=st.top();p.se++;
st.pop();
if(p.se==p.fi) tot-=p.fi;else st.push(p);
}else {
st.push(mp(x,1));
}
cout<<tot<<endl;
}
return 0;
}
E Ranges on Tree
虚树
#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)
vi v[MAXN];
int l[MAXN],r[MAXN],tim=0;
void dfs(int x,int fa) {
bool fl=0;
l[x]=INF;r[x]=-1;
for (auto u:v[x])
if (u!=fa) {
dfs(u,x);
fl=1;
l[x]=min(l[x],l[u]);
r[x]=max(r[x],r[u]);
}
if(!fl) ++tim,l[x]=tim,r[x]=tim;
}
int main()
{
// freopen("c.in","r",stdin);
// freopen(".out",w",stdout);
int n=read();
For(i,n-1) {
int x=read(),y=read();
v[x].pb(y); v[y].pb(x);
}
dfs(1,-1);
For(i,n) {
cout<<l[i]<<' '<<r[i]<<endl;
}
return 0;
}
F Sum Sum Max
#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,m;
#define MAXN (212345)
ll x[MAXN],y[MAXN];
ll a[MAXN],b[MAXN];
void work() {
cin>>n>>m;
For(i,n) x[i]=read(),y[i]=read();
a[0]=b[0]=0;
For(i,n) {
a[i]=a[i-1]+x[i]*y[i];
}
ll ans=x[1];
For(i,n) {
b[i]=b[i-1]+a[i-1]*y[i]+(1+y[i])*y[i]/2*x[i];
if((a[i-1]>0)&&(a[i]<0)) {
ll t=-a[i-1]/x[i];
ll p=b[i-1]+a[i-1]*t+(1+t)*t/2*x[i];
gmax(ans,p)
}
gmax(ans,b[i]);
}
cout<<ans<<endl;
}
int main()
{
// freopen("f.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--) {
work();
}
return 0;
}
G Teleporting Takahashi
从
(
0
,
0
,
0
)
(0,0,0)
(0,0,0)经过
k
k
k步移动到
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),每步只能向上下左右前后移动一个单位长度,求方案数。
方便起见,x,y,z取绝对值。
如果距离太远,或
k
k
k和
x
+
y
+
z
x+y+z
x+y+z奇偶性不同,无解。
否则,
考虑经过
x
+
y
+
2
k
x+y+2k
x+y+2k步移动从
(
0
,
0
)
(0,0)
(0,0)移动到
(
x
,
y
)
(x,y)
(x,y)的方案数。
f
[
k
]
=
∑
i
=
0
k
(
x
+
y
+
2
k
x
+
i
,
y
+
k
−
i
,
i
,
k
−
i
)
f[k]=\sum_{i=0}^k\dbinom{x+y+2k}{x+i,y+k-i,i,k-i}
f[k]=∑i=0k(x+i,y+k−i,i,k−ix+y+2k)
=
∑
i
=
0
k
(
x
+
y
+
2
k
x
+
y
+
k
,
i
,
k
−
i
)
=\sum_{i=0}^k\dbinom{x+y+2k}{x+y+k,i,k-i}
=∑i=0k(x+y+k,i,k−ix+y+2k)
=
∑
i
=
0
k
(
x
+
y
+
2
k
x
+
y
+
k
)
(
x
+
y
+
k
y
+
k
−
i
)
(
k
i
)
=\sum_{i=0}^k\dbinom{x+y+2k}{x+y+k}\dbinom{x+y+k}{y+k-i}\dbinom{k}{i}
=∑i=0k(x+y+kx+y+2k)(y+k−ix+y+k)(ik)
=
(
x
+
y
+
2
k
x
+
y
+
k
)
∑
i
=
0
k
(
x
+
y
+
k
y
+
k
−
i
)
(
k
i
)
=\dbinom{x+y+2k}{x+y+k}\sum_{i=0}^k\dbinom{x+y+k}{y+k-i}\dbinom{k}{i}
=(x+y+kx+y+2k)∑i=0k(y+k−ix+y+k)(ik)
=
(
x
+
y
+
2
k
x
+
y
+
k
)
∑
i
=
0
k
(
x
+
y
+
k
y
+
k
−
i
)
(
k
i
)
=\dbinom{x+y+2k}{x+y+k}\sum_{i=0}^k\dbinom{x+y+k}{y+k-i}\dbinom{k}{i}
=(x+y+kx+y+2k)∑i=0k(y+k−ix+y+k)(ik)
由于
∑
i
=
0
k
C
(
a
,
i
)
C
(
b
,
k
−
i
)
=
C
(
a
+
b
,
k
)
\sum_{i=0}^k { C(a,i)C(b,k-i)=C(a+b,k)}
∑i=0kC(a,i)C(b,k−i)=C(a+b,k)
=
(
x
+
y
+
2
k
x
+
y
+
k
)
(
x
+
y
+
2
k
y
+
k
)
=\dbinom{x+y+2k}{x+y+k} \dbinom{x+y+2k}{y+k}
=(x+y+kx+y+2k)(y+kx+y+2k)
最后考虑3维的情况,假设
x
,
y
x,y
x,y轴占了
x
+
y
+
2
i
x+y+2i
x+y+2i步,
z
z
z轴占了
z
+
2
(
k
−
i
)
z+2(k-i)
z+2(k−i)步
a
n
s
=
∑
i
=
0
n
−
x
−
y
−
z
2
f
[
i
]
∗
(
n
x
+
y
+
2
i
,
k
−
i
,
z
+
k
−
i
)
ans=\sum_{i=0}^{\frac{n-x-y-z}{2}} f[i]* \dbinom{n}{x+y+2i,k-i,z+k-i}
ans=∑i=02n−x−y−zf[i]∗(x+y+2i,k−i,z+k−in)
#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 (998244353)
#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;
}
#define MAXN (10000000+10)
ll inj[MAXN],jie[MAXN];
inline ll C(int a,int b) {
return (ll)jie[a]*inj[b]%F*inj[a-b]%F;
}
ll p=F;
inline int pow2(int a,ll b) //a^b mod p
{
if (b==0) return 1%p;
int c=pow2(a,b/2);
c=(ll)c*c%p;
if (b&1) c=(ll)c*a%p;
return c;
}
void pre(int n) {
jie[0]=1;For(i,n) jie[i]=mul(jie[i-1],i);
inj[0]=inj[1]=1;Fork(i,2,n) inj[i]=(F-(F/i))*inj[F%i]%F;
For(i,n) inj[i]=mul(inj[i],inj[i-1]);
}
int main()
{
// freopen("f.in","r",stdin);
// freopen(".out","w",stdout);
ll n,x,y,z;
cin>>n>>x>>y>>z;
pre(n);
x=abs(x);
y=abs(y);
z=abs(z);
if(n-x-y-z<0 ||(n-x-y-z)%2==1) {
puts("0");
}else {
ll an=0;
ll k=(n-x-y-z)>>1LL;
Rep(i,k+1) {
ll p1=C(x+y+2*i,x+y+i)*C(x+y+2*i,y+i)%F;
ll q=C(n,z+k-i+k-i)*C(z+k-i+k-i,k-i)%F*p1%F;
an=(an+q)%F;
}
cout<<an<<endl;
}
return 0;
}