IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 编程2022-02 KTV -> 正文阅读

[数据结构与算法]编程2022-02 KTV

描述

题目描述:

有n个人去KTV唱歌,每个人都有自己想唱的一些歌曲。已知该KTV每个房间都只有x个麦克风,同一首歌可以同时多人一起唱,但是同时唱的人不能超过x人,同一时刻只能唱一首歌。一共只有y首歌的时间,所有人想唱的歌都唱完或者y首歌唱完了他们就会离开。他们想知道在最优的安排策略下(让每个人尽量唱完自己想唱的歌),当他们离开时是否还有人有想唱的歌没有唱。输入保证每个人想唱的歌都不同。

输入描述:

第一行一个整数T,表示测试的数据组数1≤T≤10;

对于每组测试数据,第一行三个整数n,x,y,含义见题面,1≤n≤100,1≤x≤100,1≤y≤1000;

接下来n行按行从上到下顺序分别给出了第1到第n个人想唱的歌曲,其中每行开头一个整数a[i]表示第i个人想唱歌的数量,后面a[i]个整数,表示歌曲编号,1≤a[i]≤10。KTV可选歌曲总数不超过1000,即编号不大于1000。

输出描述:

对于每组测试数据,输出” NO”,表示离开时有人还有歌没唱完,否则输出” YES”。(不包括引号)。

思路

……

实现

#include<stdio.h>
#include<stdlib.h>

void insertSeq(int arr[], int size, int key)
{
  int index = 0;

  for(int i = 0; i < size; i++) {
    if(arr[i] >= key){
      index = i;
      break;
    } else{
      index++;
    }
  }
  for(int i = size; i > index; i--){
    arr[i] = arr[i - 1];
  }
  arr[index] = key;
  //printf("\narr[%d]:%d:%d\n", index, key, size);

  return ;
}

int checkComplete(int arr[], int size, int x_pers, int y_songs)
{
  int i, flag = 0;
  int key_id;
  int need_songs = 0, repeat = 0;

  i = 0;
  while (i < size) {
    need_songs++;
    key_id = arr[i];
    repeat = 0;
    while(arr[i] == key_id) {
      repeat++;
      i++;
      if (repeat >= x_pers)
        break;
    }
    //printf("while %d:%d:%d\n", i, need_songs, repeat);
  }
  if (need_songs <= y_songs)
    flag = 1;

  //printf("res:size=%d,%d:%d:flag=%d", size, need_songs, y_songs,flag);
  return flag;
}

int main()
{
  int T, n, x, y;
  int tempId, flag;
  int size = 0;
  int *arr_p, *arr_yp;

  scanf("%d", &T);
  for (int k = 0; k < T; k++) {
    size = 0;
    scanf("%d %d %d", &n, &x, &y);
    arr_p = (int *)malloc(n * sizeof(int));
    arr_yp = (int *)malloc(x * y * sizeof(int));
    for (int i = 0; i < n; i++) {
      scanf("%d", &arr_p[i]);
      for (int j = 0; j < arr_p[i]; j++) {
        scanf("%d", &tempId);
        insertSeq(arr_yp, size, tempId);
        size++;
      }
    }

    flag = checkComplete(arr_yp, size, x, y);
    printf("%s\n", (flag == 1)? "YES":"NO");
    free(arr_p);
    free(arr_yp);
  }

  return 0;
}

测试

?

----------------------------------------------------------------------------------------?

计划:每周一道题,作为码农,无论是什么行业都不应该放弃编程

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 11:02:21  更:2022-04-23 11:03:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:29:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码