2020牛客多校第十场AE题解

A. Permutation

题意

输出序列1~p-1,使其满足

解题

类似搜索,能乘2就乘2,否则乘3,总数量不足则无解。

int t;
int n,m;
int a[maxn];
bool vis[maxn];
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
         m = 0;
         a[++m] = 1;  vis[1] = 1;
         bool flg = 1;
        for(int i=2;i<n;++i)
        {
            int p = 2*a[i-1]%n;
            if(!vis[p])
            {
                vis[p] = 1;
                a[++m] = p; continue;
            }
            p = 3*a[i-1]%n;
            if(!vis[p])
            {
                vis[p] = 1;
                a[++m] = p; continue;
            }
            flg = 0; break;
        }
        if(!flg) puts("-1");
        else {for(int i=1;i<n;++i) printf("%d ",a[i]); printf("\n");}
        for(int i=1;i<n;++i) vis[i] = 0;
    }
    return 0;
}

E. Game

题意

每次操作可以把右边的一行格子向左移动,由于重力格子下落,可以操作任意次,求最小的最高高度。

解题

直觉是总数除以列数再向上取整,但是考虑一组样例1 20 1 1,自然可以想到求一下前缀平均值,取最大值就是答案。

int t;
int n,m;
ll a[maxn];
ll f[maxn];
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
        {
            scanf("%lld",&a[i]);
        }
        f[0] = 0;
        for(int i=1;i<=n;++i)
        {
            f[i] = f[i-1] + a[i];
        }
        ll ans = 0;
        for(int i=1;i<=n;++i)
        {
            f[i] = (f[i]+i-1)/i; ans = max(ans,f[i]);
        }
        printf("%lld\n",ans);
    }
    return 0;
}
全部评论

相关推荐

头像 会员标识
昨天 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务