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;
T1

 

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);
    
T2

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);
T3

 

以上是关于Contest1893 - 2019年6月多校联训b层测试1的主要内容,如果未能解决你的问题,请参考以下文章

Solution -「多校联训」小卖部

NKOJ3485 2015多校联训4数据

多校联训DAY 1T3 书

2019 HDOJ Multi-University Training Contest Stage 10(杭电多校)

2019 HDOJ Multi-University Training Contest Stage 4(杭电多校)

2019 HDOJ Multi-University Training Contest Stage 2(杭电多校)