鱼C论坛

 找回密码
 立即注册
查看: 3671|回复: 39

[已解决]梦想星际舰队第25关 && FCOI #9 第六题涂色游戏题解【原创】

[复制链接]
发表于 2023-8-25 19:33:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


梦想星际舰队第25关 && FCOI #9 题解


第六题:涂色游戏

题目描述

涂色游戏的游戏界面是一个 n 行 m 列的网格图,起初每一个格子都是颜色 "0"(颜色用数字代替,这里只有 0,1)。

每一次操作你都可以选择如下的任意一种:

1. 选择一行,把这一行涂成颜色“1”;
2. 选择一列,把这一列涂成颜色“0”;
这里的涂色都会覆盖原有的颜色。

请问如何操作才能把网格变成最终想要的状态(状态会通过数组形式给你)?

输入格式
第一行两个整数 n,m。

接下来 n 行,每行 m 个整数,第 i 行 j 列的整数表示 i 行 j 列需要涂成的颜色,只有 0 和 1 这两个数字。

输出格式
第一行一个整数,表示你需要操作的次数。

接下来,每一次的操作,你都要详细地指明,是哪一个操作(1或2,上有指明),操作了哪一行(列),第 i+1 行表示第 i 次操作。

例如下面就是先将第 2 行染成颜色 1,再将第 3 列染成颜色 0,最后将第 1 行染成颜色 1 的一个输出示例:

  1. 3
  2. 1 2
  3. 2 3
  4. 1 1
复制代码

你输出的第一个数字必须是 1 或 2,第二个数字不得超过行或列的实际范围,否则会视为 0 分。

如果无解,输出一行 -1。

输入输出样例
输入 #1
  1. 3 3
  2. 0 0 1
  3. 0 1 1
  4. 1 1 1
复制代码

输出 #1
  1. 5
  2. 1 1
  3. 2 2
  4. 1 2
  5. 2 3
  6. 1 3
复制代码

输入 #2
  1. 4 4
  2. 0 1 1 1
  3. 0 1 0 0
  4. 0 1 1 1
  5. 0 1 0 0
复制代码

输出 #2
  1. 8
  2. 2 2
  3. 1 2
  4. 1 4
  5. 2 3
  6. 2 4
  7. 1 1
  8. 1 3
  9. 2 1
复制代码


数据范围
1≤x1<x2≤10^9 ,1≤y1<y2≤10^9

其他说明
本题目为 zhangjinxuan 原创题目。
测试链接:https://www.luogu.com.cn/problem/U330607

答案与解析
游客,如果您要查看本帖隐藏内容请回复
[/hide]
最佳答案
2023-8-25 20:01:32
诶嘿嘿,硬是用STL(没用任何算法)搞出来了
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <set>
  4. using namespace std;
  5. //膜拜[url=home.php?mod=space&uid=1292144]@zhangjinxuan[/url] dalao %%%orz
  6. //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  7. //我这个蒟蒻被zhangjinxuan,mushezi,yuanhao,sfqxx薄纱啦!!!
  8. //FCOI please do not ak me!!!

  9. //谢谢zhangjinxuan大佬提供特殊约定~

  10. typedef struct{
  11.         int row;
  12.         int count;
  13. }hh; //统计各行的0的数目

  14. inline bool cmp(hh a,hh b)
  15. {
  16.         return a.count<b.count;
  17. }

  18. inline void out_row(bool *sz,int col_max)
  19. {
  20.     for(int i=0;i<col_max;i++)
  21.     {
  22.         printf("%d.",sz[i]);


  23.     }
  24.    

  25. }

  26. int main()
  27. {
  28.         set<int>rows;
  29.         int n,m,cnt,ch,stepcnt=0;
  30.         hh rs[2010];
  31.         bool sz[2010][2010];
  32.         scanf("%d%d",&n,&m);
  33.     getchar();
  34.         for(int i=0;i<n;i++)//hang
  35.         {
  36.                 cnt=0;
  37.                 for(int j=0;j<m;j++)//lie
  38.                 {
  39.                         ch=getchar();
  40.             //printf("%d.",ch);
  41.                         if(ch=='0')
  42.                         {
  43.                                 sz[i][j]=false;
  44.                                
  45.                         }
  46.                         else
  47.                         {
  48.                                 sz[i][j]=true;
  49.                                 cnt++;
  50.                         }
  51.                         getchar();
  52.                 }
  53.         getchar();
  54.                 rs[i].count=cnt;
  55.                 rs[i].row=i;
  56.                 stepcnt+=m-cnt;
  57.         }
  58.     sort(rs,rs+n,cmp);
  59.     /*for(int k=0;k<n;k++)
  60.     {
  61.         out_row(sz[rs[k].row],m);
  62.         putchar('\n');



  63.     }*/
  64.         stepcnt+=n;
  65.     for(int i=0;i<n;i++)
  66.         {
  67.                 int r=rs[i].row;
  68.                 for(int j=0;j<m;j++)
  69.                 {
  70.                         if(!sz[r][j])
  71.             {
  72.                 if(rows.count(j)==0 and i!=0)
  73.                 {
  74.                     printf("-1\n");
  75.                     return 0;
  76.                 }
  77.                 if(i==0)rows.insert(j);
  78.             }
  79.                 }
  80.         }
  81.         printf("%d\n",stepcnt);
  82.        
  83.         for(int i=0;i<n;i++)
  84.         {
  85.                 int r=rs[i].row;
  86.                 printf("1 %d\n",r+1);
  87.                 for(int j=0;j<m;j++)
  88.                 {
  89.                         if(!sz[r][j])
  90.             {
  91.                 printf("2 %d\n",j+1);
  92.                
  93.             }
  94.                 }
  95.         }
  96.        
  97. }
复制代码


一个排序,排出每行的'0'的个数
然后用set看是否真包含。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-8-25 19:36:48 | 显示全部楼层
好吧贪心怎么做QAQ
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-26 21:38:38 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 20:02:51 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-26 11:49:01 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-26 08:34:44 | 显示全部楼层
这是要不起的题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 21:38:57 | 显示全部楼层

data (5).zip

6.22 KB, 下载次数: 1

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 20:54:07 | 显示全部楼层
额外减小 发表于 2023-8-25 20:35
https://www.luogu.com.cn/discuss/525529
不可以,总司令 然后得一半的分

Fcr8 果篮(D)那道题也是,输出-1得45分,我都怀疑是彩蛋

评分

参与人数 1鱼币 +1 收起 理由
额外减小 + 1 6

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:51:43 | 显示全部楼层
zhangjinxuan 发表于 2023-8-25 20:49
目前不方便,我半小时后给你

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 20:49:54 | 显示全部楼层
额外减小 发表于 2023-8-25 20:49
那你能把我wa的那几个测试点的数据发我看看嘛

目前不方便,我半小时后给你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:49:06 | 显示全部楼层

那你能把我wa的那几个测试点的数据发我看看嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:48:34 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 20:47:48 | 显示全部楼层
额外减小 发表于 2023-8-25 20:46
你看出我代码哪错了吗

没有
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:46:24 | 显示全部楼层

你看出我代码哪错了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 20:41:06 From FishC Mobile | 显示全部楼层
额外减小 发表于 2023-8-25 20:33
如果随机生成数据的话,-1的几率应该是很高的,所以他是认真自己造的

构造
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:35:21 | 显示全部楼层
https://www.luogu.com.cn/discuss/525529
不可以,总司令 然后得一半的分
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:33:05 | 显示全部楼层
如果随机生成数据的话,-1的几率应该是很高的,所以他是认真自己造的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:32:17 | 显示全部楼层
额外减小 发表于 2023-8-25 20:31
对,我还想着不可以总司令能骗多少分来着

我现在知道为什么他没设多组数据了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:31:16 | 显示全部楼层
sfqxx 发表于 2023-8-25 20:28
这道题甚至没有-1

对,我还想着不可以总司令能骗多少分来着
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:28:17 | 显示全部楼层
额外减小 发表于 2023-8-25 20:27
看来我是这题唯一一个AC的

这道题甚至没有-1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:27:41 | 显示全部楼层
看来我是这题唯一一个AC的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 20:10:38 | 显示全部楼层
上线看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-27 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表