牛客小白月赛64 C题 题解
题意描述
这一题的意思其实就是,让你构造一个\(n * k\)的矩阵,使得第 i 列的总和为 i ,同时使得:每一列的任意两个数之间的差不大于1,且任意两行之间的总和差不大于1。
\(1 \le n * k \le 10^6\)
观察样例:
输入:
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
可以发现一个规律,可能这样不太好看出来,但是如果是这样就很清楚了。
 1 0 1 0 1
 0 1 0 1 1
 0 1 0 1 1
 0 0 1 1 1
 0 0 1 1 1
 1..1...
 ..1...
 ..1...
 ...1 ...
 ...1 ...
也就是每一列,从当前位置从上往下循环加一,当达到这一列的总数时,跳到下一列,而下一列的起始位置就是上一列加一。
但是,如果我们直接暴力模拟加的过程,肯定是会超时的,因为这样的时间复杂度是总共的个数\(\frac{n (n + 1)}{2}\),也就是\(O(n^2)\)的,这样显然会超时。
我们想对于第 i 列,循环去加,实际上每个数是加了\(\lfloor \frac{i}{k} \rfloor\)循环次,剩下不能凑成整循环的\(i \mod k\)个,再加上 1 ,这样每个数的结果就可以直接算出,不需要模拟去加了。
时间复杂度\(O(n·k)\)
为什么是对的
首先我们的构造是循环在第 i 列的每个位置加 1 ,因此也就是说每个数最大是\(\lfloor \frac{i}{k} \rfloor + 1\),最小是\(\lfloor \frac{i}{k} \rfloor\),相差最大为一,满足题目要求。
其次,我们将每次加的列数排开,例如样例:123451234512345..,发现我们同样可以用相同方法,设总数为 sum,那每一列最多为\(\lfloor \frac{sum}{k} \rfloor + 1\),最少为\(\lfloor \frac{sum}{k} \rfloor\),相差最 1 ,同样满足要求。
代码
#include<bits/stdc++.h>
using namespace std;
int n, k;
int main()
{
    scanf("%d%d", &n, &k);
    int m[k + 1][n + 1];
    for(int i = 1; i <= k; i++)
        for(int j = 1; j <= n; j++)
            m[i][j] = 0;
    int now = 1;
    for(int i = 1; i <= n; i++)
    {
        int tmp = i / k;
        for(int j = 1; j <= k; j++)
        {
            m[j][i] += tmp;
        }
        for(int j = 1; j <= i % k; j++)
        {
            m[now][i]++;
            now++;
            if(now > k)
                now = 1;
        }
    }
    for(int i = 1; i <= k; i++)
    {
        for(int j = 1; j <= n; j++)
            printf("%d ", m[i][j]);
        printf("\n");
    }
    return 0;
}
牛客小白月赛64 C题 题解的更多相关文章
- 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论
		链接:https://www.nowcoder.com/acm/contest/135/C来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其 ... 
- 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】
		比赛传送门:https://ac.nowcoder.com/acm/contest/53366 难度适中. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式 ... 
- 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花
		求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ... 
- 【牛客小白月赛21】NC201605 Bits
		[牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数 ... 
- 牛客小白月赛16 小石的妹子  二分  or  线段树
		牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以. 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化. 怎么处理呢,你仔细想 ... 
- 牛客小白月赛65ABCD(E)
		比赛链接:牛客小白月赛65_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) A:牛牛去购物 题意 ... 
- 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
		牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ... 
- 牛客小白月赛8 - E - 诡异数字  数位DP
		牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ... 
- 牛客小白月赛18 Forsaken给学生分组
		牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网  Forsaken有 ... 
- 牛客小白月赛18 Forsaken喜欢数论
		牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题  Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ... 
随机推荐
- react之todoList基础小项目
			1.项目最终成品和项目目录快照如图: 2.context.js文件 // 使用context进行多级传递数据 // 1. createContext 创建一个可以多级传递的context数据 // 2 ... 
- 2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com
			2023-01-15:销售员.编写一个SQL查询,报告没有任何与名为 "RED" 的公司相关的订单的所有销售人员的姓名.以 任意顺序 返回结果表. DROP TABLE IF EX ... 
- 2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +-------+------+ | 4.
			2022-11-23: 分数排名.输出结果和表的sql如下.请写出输出结果的sql语句? ±------±-----+ | score | rank | ±------±-----+ | 4.00 | ... 
- 2022-10-20:以下go语言代码输出什么?A:7;B:7.0;C:0;D:编译错误。 package main import ( “fmt“ ) func main() { const
			2022-10-20:以下go语言代码输出什么?A:7:B:7.0:C:0:D:编译错误. package main import ( "fmt" ) func main() { ... 
- 2022-10-09:我们给出了一个(轴对齐的)二维矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐
			2022-10-09:我们给出了一个(轴对齐的)二维矩形列表 rectangles . 对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标 ... 
- 小知识:设置archive_lag_target参数强制日志切换
			为客户测试一个ADG场景问题,发现测试环境的日志切换频率过低,总是需要定期手工切换,这非常影响测试心情. 实际上,可以设置archive_lag_target参数强制日志切换. 比如设置: alter ... 
- status能否设置为布尔值类型,前端采用复选框形式
			是的,可以将status设置为布尔类型,这样可以在前端使用复选框形式展示.在模型中的定义可以如下: class Acceptance(models.Model): # ... status = mod ... 
- 计蒜客蓝桥杯省赛模拟G
			题目 一天蒜头君得到 n 个字符串 si,每个字符串的长度都不超过 1010. 蒜头君在想,在这 n 个字符串中,以 si 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来 n ... 
- 500行代码手写docker-实现硬件资源限制cgroups
			(5)500行代码手写docker-实现硬件资源限制cgroups 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一 ... 
- cookie和session以及token
			cookie和seesion以及token 技术都基于状态保持, cookie:  有服务器生成, 以 k:v 形式保持在浏览器端,下次请求服务器,附带cookie信息:存在恶意修改可能:可以对co ... 
