2018山东冬令营:运动会II

2024-01-03 13:18

本文主要是介绍2018山东冬令营:运动会II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运动会II

时间限制: 1 Sec   内存限制: 128 MB
提交: 62   解决: 21
[ 提交][ 状态][ 讨论版]

题目描述

你打算举办一场运动会。有n个运动员和m个可供选择的运动项目,你要从m个项目中选出一个非空的子集。第i个运动员第j喜欢的项目是Ai,j,每个运动员会且仅会参加你选出的项目中他最喜欢的一个。你不希望参加某个项目的人数过多,因此你需要恰当地选出这个子集,使得最多人参加的项目的参加人数最少。

输入

第一行为两个整数n,m。
接下来n行,每行m个整数,第i行的第j个整数表示Ai,j

输出

输出一个整数,表示最多人参加的项目的参加人数最少是多少。

样例输入

5 4

2 4 3 1

1 3 2 4

1 3 4 2

1 4 3 2

2 1 4 3

样例输出

2

提示

对于20%的数据,保证1≤n,m≤10。
对于40%的数据,保证1≤n≤300,1≤m≤15。
对于70%的数据,保证1≤n,m≤300。
对于100%的数据,保证1≤n,m≤1000,Ai,1,Ai,2,...,Ai,m是一个排列。


【思路】

对于每个m; 扫描n  维护数量最多的那个值, 然后 标记,把列中所有等于其值的的 删除 后移标记

最后最小的就是答案

 【代码实现】

#include <iostream>
#include <bits/stdc++.h>typedef long long ll;
const int INF=0x3f3f3f3f;
using namespace std;
const int N=2500;
int a[1110][1500];
int head[1010];
map<int,int>mp;
int vis[1010];
set<int>::iterator it;
int main()
{int n,m;memset(a,0,sizeof(a));cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)cin>>a[i][j];head[i]=1;}int cot[1500];int ans=INF;for(int i=1;i<=m;i++){memset(cot,0,sizeof(cot));int maxx=0,m=0;for(int j=1;j<=n;j++){while(mp[a[j][head[j]] ] )head[j]++;int pm=a[ j ][ head[j] ];cot[ pm ]++;if( cot[ pm]>=maxx){maxx=cot[pm];m=pm;}}// cout<<m<<" "<<cot[m]<<endl;ans=min(ans,cot[m]);mp[m]=1;}cout<<ans<<endl;return 0;
}

123

这篇关于2018山东冬令营:运动会II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/565810

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt