Contest1893 - 2019年6月多校联训b层测试1
Posted yanghaokun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Contest1893 - 2019年6月多校联训b层测试1相关的知识,希望对你有一定的参考价值。
传送门 密码:waxadyt
T1
暴力
对于任意相邻的两个值
中间能到达的最大高度是固定的
加上头尾,判一下就好了
代码//感谢Th Au K
#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define db double #define N 2000100 #define jd (isdigit(c)) #define gg c=getchar() #define inf 233333333333333 #define eps 1e-10 #define mod 12345678910 #define ls k<<1 #define rs k<<1|1 #define root t[0].ch[1] inline ll read() ll f=0;bool x=1;char gg; for(;!jd;gg)if(c==‘-‘)x=0; for(;jd;gg)f=(f<<1)+(f<<3)+(c&15); return x?f:-f; inline void write(ll x) if(!x)putchar(‘0‘); else if(x<0)putchar(‘-‘),x=-x; char s[25]; int j=0; for(;x;x/=10)s[j++]=x%10; for(int i=j-1;~i;i--)putchar(s[i]+48); putchar(‘\n‘); ll n,m,ans; struct dia ll d,h; d[N]; int main() n=read(),m=read(); for(int i=1;i<=m;i++)d[i].d=read(),d[i].h=read(); ans=d[1].h+d[1].d-1; for(int i=2;i<=m;i++) if(d[i].h-d[i-1].h>d[i].d-d[i-1].d) puts("IMPOSSIBLE"); return 0; ll h1=max(d[i].h,d[i-1].h),h2=min(d[i].h,d[i-1].h); ll dd=h1-h2; ll t=(d[i].d-d[i-1].d-dd)/2+h1; ans=max(ans,t); ll t=d[m].h+(n-d[m].d); write(max(ans,t)); return 0;
T2
枚举dx和dy
判一下
打个标记
O(n^4)秒过
代码
#include<bits/stdc++.h> using namespace std; int a[1001][1001]; int vis[1001][1001]; int x[1001001],y[1001001],num,n; int ans[1001][1001]; inline void get(int xx,int yy) char c=getchar(); for(;;c=getchar()) if(c==‘x‘) a[xx][yy]=1; return; if(c==‘.‘) a[xx][yy]=0; return; if(c==‘o‘) x[++num]=xx; y[num]=yy; a[xx][yy]=2; return; inline bool check(int xx,int yy) for(int i=1;i<=num;i++) int nx=x[i]+xx,ny=y[i]+yy; if((nx>0)&&(nx<=n)&&(ny>0)&&(ny<=n)) if(!a[nx][ny])return 0; return 1; inline void make(int xx,int yy) for(int i=1;i<=num;i++) int nx=x[i]+xx,ny=y[i]+yy; if((nx>0)&&(nx<=n)&&(ny>0)&&(ny<=n)) vis[nx][ny]=1; int main() scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) get(i,j); for(int i=-n+1;i<=n-1;i++) for(int j=-n+1;j<=n-1;j++) if(check(i,j)) make(i,j); ans[i+n][j+n]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(a[i][j]&&(!vis[i][j])) puts("NO"); return 0; puts("YES"); for(int i=1;i<=(n<<1)-1;i++) for(int j=1;j<=(n<<1)-1;j++) if((i==n)&&(j==n))putchar(‘o‘); else if(ans[i][j])putchar(‘x‘); else putchar(‘.‘); putchar(‘\n‘);
T3
数学好题
ans=pow(k,k-1)*pow(n-k,n-k)
代码
#include<bits/stdc++.h> using namespace std; const long long mod=1e9+7; const long long phi=1e9+6; inline long long pow(long long a,long long b) long long ans=1; b%=phi; a%=mod; while(b) if(b&1)ans=(ans*a)%mod; a=(a*a)%mod; b>>=1; return ans; int main() long long n,k; scanf("%lld%lld",&n,&k); printf("%lld",(pow(k,k-1)*pow(n-k,n-k))%mod);
以上是关于Contest1893 - 2019年6月多校联训b层测试1的主要内容,如果未能解决你的问题,请参考以下文章
2019 HDOJ Multi-University Training Contest Stage 10(杭电多校)