2019 ICPC Asia Nanjing Regional
链接:https://www.jisuanke.com/contest/5528/challenges
A. A Hard Problem
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
int t,n;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int ans=(n+1)/2+1;
printf("%d\n",ans);
}
return 0;
}
C. Digital Path
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1000+10,mod=1e9+7;
int n,m;
ll a[maxn][maxn];
ll dp[maxn][maxn][5];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct Node
{
ll x,y,val;
bool operator<(const Node& b) const
{
return val<b.val;
}
};
void update(int x,int y,int nx,int ny)
{
for(int i=2;i<=4;++i)
{
dp[nx][ny][i]+=dp[x][y][i-1];
dp[nx][ny][i]%=mod;
}
dp[nx][ny][4]+=dp[x][y][4];
dp[nx][ny][4]%=mod;
}
int main()
{
priority_queue<Node> pq;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
scanf("%lld",&a[i][j]);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
bool ok=1;
for(int k=0;k<=3;++k)
{
int nx=i+dx[k];
int ny=j+dy[k];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[i][j]+1==a[nx][ny])
ok=0;
}
pq.push({i,j,a[i][j]});
if(ok) dp[i][j][1]=1;
}
while(!pq.empty())
{
Node t=pq.top();
pq.pop();
bool ok=0;
for(int i=0;i<=3;++i)
{
int nx=t.x+dx[i];
int ny=t.y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]+1==a[t.x][t.y])
{
ok=1;
update(t.x,t.y,nx,ny);
}
}
}
ll ans=0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
bool f1=0,f2=0;
for(int k=0;k<=3;++k)
{
int nx=i+dx[k];
int ny=j+dy[k];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m)
{
if(a[i][j]==a[nx][ny]-1) f1=1;
if(a[i][j]==a[nx][ny]+1) f2=1;
}
}
if(f1&&!f2) ans=(ans+dp[i][j][4])%mod;
}
}
printf("%lld\n",ans);
return 0;
}
H. Prince and Princess
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
int a,b,c;
int main()
{
scanf("%d%d%d",&a,&b,&c);
if(a==1&&b==0&&c==0) puts("YES\n0");
else
{
if(a>b+c) printf("YES\n%d\n",2*(b+c)+1);
else puts("NO");
}
return 0;
}