码迷,mamicode.com
首页 > 其他好文 > 详细

Contest1893 - 2019年6月多校联训b层测试1

时间:2019-06-07 22:54:12      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:style   sig   efi   clu   check   http   ref   pos   pac   

传送门 密码: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

标签:style   sig   efi   clu   check   http   ref   pos   pac   

原文地址:https://www.cnblogs.com/yanghaokun/p/10989164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!