文章目录

  • 【XR-4】模拟赛
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 样例 #3
      • 样例输入 #3
      • 样例输出 #3
    • 提示
  • 小白代码
  • 大佬分析
  • 大佬代码

【XR-4】模拟赛

题目描述

X 校正在进行 CSP 前的校内集训。

一共有 nnn 名 OIer 参与这次集训,教练为他们精心准备了 mmm 套模拟赛题。

然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接下来的 kkk 天中都恰好有 mmm 天有空打模拟赛。

为了方便管理,教练规定一个人必须按顺序打完 mmm 套模拟赛题。

比如,小 X 在接下来的第 2,3,52,3,52,3,5 天有空打模拟赛,那么他就必须在第 222 天打第 111 套模拟赛题,第 333 天打第 222 套模拟赛题,第 555 天打第 333 套模拟赛题。

教练需要为每一个人的每一次模拟赛做准备,为了减小工作量,如果在某一天有多个人打同一套模拟赛题,那么教练只需要在这一天准备一场使用这一套题的模拟赛即可。

你作为机房大佬,教练想请你帮他计算一下,他每天需要准备多少场模拟赛。

输入格式

第一行三个整数 n,m,kn,m,kn,m,k。

接下来 nnn 行,每行 mmm 个整数,第 iii 行第 jjj 列的整数 ai,ja_{i,j}ai,j​ 表示第 iii 个人在接下来的 kkk 天中第 jjj 个有空的日子为第 ai,ja_{i,j}ai,j​ 天。

输出格式

一行 kkk 个整数,第 iii 个整数表示接下来的第 iii 天教练需要准备的模拟赛场数。

样例 #1

样例输入 #1

1 3 5
2 3 5

样例输出 #1

0 1 1 0 1

样例 #2

样例输入 #2

6 3 7
2 3 4
2 5 7
3 5 7
1 3 5
5 6 7
1 2 3

样例输出 #2

1 2 3 1 3 1 1

样例 #3

样例输入 #3

10 10 20
2 3 4 8 9 11 12 16 17 18
2 3 6 10 12 13 14 15 19 20
1 3 7 10 11 13 14 15 17 19
1 2 4 6 7 9 15 17 19 20
2 3 5 6 9 11 14 16 19 20
1 2 3 8 9 10 11 12 15 19
1 4 6 7 9 12 13 17 18 19
1 7 8 9 10 11 13 15 18 20
1 5 6 7 8 9 13 16 18 19
4 5 7 10 11 13 14 17 18 20

样例输出 #3

1 2 2 3 2 2 4 3 3 3 3 4 2 1 3 1 2 2 2 1

提示

本题采用捆绑测试。

  • Subtask 1(13 points):n=m=k=1n = m = k = 1n=m=k=1。
  • Subtask 2(24 points):n=1n = 1n=1。
  • Subtask 3(24 points):m=1m = 1m=1。
  • Subtask 4(39 points):无特殊限制。

对于 100%100\%100% 的数据,1≤n,m,k≤1031 \le n,m,k \le 10^31≤n,m,k≤103,m≤km \le km≤k,1≤ai,1<ai,2<⋯<ai,m≤k1 \le a_{i,1} < a_{i,2} < \cdots < a_{i,m} \le k1≤ai,1​<ai,2​<⋯<ai,m​≤k。

小白代码

#include <iostream>
#include <string>
using namespace std;/*
n 名 参与集训
m 套模拟赛题。
接下来的 k 天中都恰好有 m 天有空打模拟赛
*/
int main() {int acDay;int n, m, k;cin >> n >> m >> k;string dayPlan[k + 1]; // 中间结果,转成字符串来统计的int weekPlan[k + 1] = {0}; // 最后结果int arr[n][m];//int arr[n][k];// 读取数据for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> arr[i][j];// if(dayPlan[arr[i][j]] >)// dayPlan[acDay];}}// 处理数据for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {//cout << arr[i][j] << " ";// if(dayPlan[arr[i][j]] >)if (dayPlan[arr[i][j]].find(to_string(arr[i][j] + 1234 * (j + 1))) != dayPlan[arr[i][j]].npos) ;else { // 1234 随便加的,防止无意间变成相同字符串weekPlan[arr[i][j]]++;dayPlan[arr[i][j]] += "  " + to_string(arr[i][j] + 1234 * (j + 1)) + "  ";            }//arr[i][j] += 1000 * j; // 相当于加权,区别相同数据}//cout << endl;}// 输出数据for (int i = 1; i < k + 1; i++) {cout << weekPlan[i] << " ";}return 0;
}
//1 2 2 3 2 2 4 3 3 3 3 4 2 1 3 1 2 2 2 1
//1 2 2 3 2 2 4 3 3 3 3 4 2 1 3 1 2 2 2 1

大佬分析

大佬代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;/*
教练需要为每一个人的每一次模拟赛做准备,为了减小工作量,
如果在某一天有多个人打同一套模拟赛题,
那么教练只需要在这一天准备一场使用这一套题的模拟赛即可。
*/
int n, m, k, tot[1004], vis[1004][1004], a[1004][1004]; // vis数组确保每个点只入队一次
// m 套模拟赛题
int main() {scanf("%d%d%d", &n, &m, &k);for(int i = 1; i <= n; ++i) // i,j 都是从1开始的for(int j = 1; j <= m; ++j)scanf("%d", &a[i][j]);for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j) {if(!vis[j][a[i][j]]) { // vis数组确保每个点只入队一次vis[j][a[i][j]] = 1; // 某一天有多个人打同一套模拟赛题tot[a[i][j]]++;
// a[i][j]的值为得到的某一天,i为某队员,j为第j套模拟赛题。vis得到的是打j套模拟的某一天
//(如果该值为0,则需专门加一份,否则,由题意,不用额外准备了)}}}for(int i = 1; i <= k; ++i)printf("%d ", tot[i]);return 0;
}

用vis数组保证只入队一次P5594 【XR-4】模拟赛相关推荐

  1. 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字

    一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...

  2. 数组中只出现一次的数字

    一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 数字都出现两次,则异或肯定为0. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出 ...

  3. 【剑指offer-Java版】40数组中只出现一次的数字

    数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字仅仅出 ...

  4. UVA - 1252 Twenty Questions (状压dp+vis数组加速)

    有n个物品,每个物品有m个特征.随机选择一个物品让你去猜,你每次可以询问一个特征的答案,问在采取最优策略时,最坏情况下需要猜的次数是多少. 设siz[S]为满足特征性质集合S的特征的物品总数,dp[S ...

  5. 数组中只出现1次的2个数

    数组中只出现1次的2个数 如题所示: 思路 源代码如下: 如题所示: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 可以先考虑如果只有1个数字出现1次,其 ...

  6. [剑指offer] 数组中只出现一次的数字

    本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...

  7. 牛客题霸 [数组中只出现一次的数字] C++题解/答案

    牛客题霸 [数组中只出现一次的数字] C++题解/答案 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 用map来记录每个数字出现几次, ...

  8. 40:数组中只出现一次的数字

    /*** 面试题40:数组中只出现一次的数字* 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ public class _40_num_one_ti ...

  9. 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字

    剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...

最新文章

  1. 最简单的基于FFmpeg的AVfilter的例子-修正版
  2. 前端学习(3219):...扩展
  3. Cookie文件内容的含义
  4. FastDfs工作笔记002---SpringBoot集成FastDfs
  5. python玩微信跳一跳_用python玩微信跳一跳
  6. 24_多易教育之《yiee数据运营系统》OLAP平台-运营分析篇
  7. ktv服务器管理系统,小型KTV综合解决方案
  8. Java坦克大战Summary
  9. python excel行列转置_用powershell+excel行列转置三步走
  10. python flask web框架_Python_WEB框架之Flask
  11. win10安装graph_tool,在jupyter notebook运行代码
  12. Excel操作:如何锁定单元格、有几种方法实现分类汇总
  13. 修改MySQL数据库的密码
  14. 报计算机专业高考必考科目,不能错过的重点!新高考选科:名校专业必选的那些科目!...
  15. matlab 符号表达式与字符串的互转 及相关替换操作
  16. 关于stm32定时器定时周期计算
  17. 【已解决】zookeeper显示Error contacting service. It is probably not running等问题
  18. 原子操作底层实现与上层应用
  19. 曲线提取数据Engauge Digitizer
  20. 数据库课程大作业:课程管理系统——java实现、图形化,我写了MySQL和SQL两个版本

热门文章

  1. 应用结构体实现通讯录
  2. 微信小程序返回上一页 没有上一页的情况下返回首页
  3. Linux 中的内存使用率计算方式
  4. 亚马逊(Amazon)新接口SP-API和PII受限信息的开发者申请
  5. VMware安装centos7
  6. python有n元人民币、其中有10元的_Python笔记-古灵阁小精灵金加隆金币兑换人民币...
  7. Python 自动化提取基因的 CDS
  8. 超时锁定计算机,Win10电脑设置锁定屏幕超时怎么办
  9. 【C语言小训】1383-动态的数组
  10. HDU 1425 sort