牛客小白月赛64 C-Karashi的生日蛋糕(思维)

https://ac.nowcoder.com/acm/contest/49244/C

题目大意:
 
Karashi决定将水果摆放成n圈,第i圈必须有i个水果。 一共k个人,Karashi需要把蛋糕沿半径均分成k块,任意两块蛋糕包含的水果总个数相差不得超过1 。
 
写出满足上述条件的一种摆放方案。
输入 
5 5
输出 
0 0 1 1 1
0 0 1 1 1
1 0 1 0 1
0 1 0 1 1
0 1 0 1 1

友情提醒:这unordered_map带cin cout会被卡时间
常数大,实际速度和map相差不大

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=1000200,M=2002;
//vector<LL> v[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
LL n,m;
unordered_map<LL,LL> a[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        //cin>>m>>n;
        scanf("%ld %ld",&m,&n);
        LL head=0;
        LL num=1;
        for(int j=0;j<m;j++)
        {
            for(int i=head,idx=1;idx<=(j+1)-(num-1)*n;i++,idx++)
            {
                a[i%n][j]=num;
                head=(i%n+1)%n;
            }
            LL flag=0;
            for(int i=0;i<n;i++)
            {
                if(a[i][j]!=num)
                {
                    a[i][j]=num-1;
                    flag++;
                }
            }
            if(flag==0) num++;
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                //cout<<a[i][j]<<" ";
                printf("%ld ",a[i][j]);
            }
            //cout<<endl;
            printf("\n");
        }
    }
    return 0;
}
posted @ 2023-01-08 19:55  Vijurria  阅读(40)  评论(0编辑  收藏  举报