用vis数组保证只入队一次P5594 【XR-4】模拟赛
文章目录
- 【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】模拟赛相关推荐
- 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字
一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...
- 数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 数字都出现两次,则异或肯定为0. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出 ...
- 【剑指offer-Java版】40数组中只出现一次的数字
数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字仅仅出 ...
- UVA - 1252 Twenty Questions (状压dp+vis数组加速)
有n个物品,每个物品有m个特征.随机选择一个物品让你去猜,你每次可以询问一个特征的答案,问在采取最优策略时,最坏情况下需要猜的次数是多少. 设siz[S]为满足特征性质集合S的特征的物品总数,dp[S ...
- 数组中只出现1次的2个数
数组中只出现1次的2个数 如题所示: 思路 源代码如下: 如题所示: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 可以先考虑如果只有1个数字出现1次,其 ...
- [剑指offer] 数组中只出现一次的数字
本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...
- 牛客题霸 [数组中只出现一次的数字] C++题解/答案
牛客题霸 [数组中只出现一次的数字] C++题解/答案 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 用map来记录每个数字出现几次, ...
- 40:数组中只出现一次的数字
/*** 面试题40:数组中只出现一次的数字* 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ public class _40_num_one_ti ...
- 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字
剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...
最新文章
- 最简单的基于FFmpeg的AVfilter的例子-修正版
- 前端学习(3219):...扩展
- Cookie文件内容的含义
- FastDfs工作笔记002---SpringBoot集成FastDfs
- python玩微信跳一跳_用python玩微信跳一跳
- 24_多易教育之《yiee数据运营系统》OLAP平台-运营分析篇
- ktv服务器管理系统,小型KTV综合解决方案
- Java坦克大战Summary
- python excel行列转置_用powershell+excel行列转置三步走
- python flask web框架_Python_WEB框架之Flask
- win10安装graph_tool,在jupyter notebook运行代码
- Excel操作:如何锁定单元格、有几种方法实现分类汇总
- 修改MySQL数据库的密码
- 报计算机专业高考必考科目,不能错过的重点!新高考选科:名校专业必选的那些科目!...
- matlab 符号表达式与字符串的互转 及相关替换操作
- 关于stm32定时器定时周期计算
- 【已解决】zookeeper显示Error contacting service. It is probably not running等问题
- 原子操作底层实现与上层应用
- 曲线提取数据Engauge Digitizer
- 数据库课程大作业:课程管理系统——java实现、图形化,我写了MySQL和SQL两个版本