题目描述:

Alice上化学课时又分心了,他首先画了一个3行N列的表格,然后把数字1到N填入表格的第一行,保证每个数只出现一次,另外两行他也填入数字1到N,但不限制每个数字的出现次数。Alice现在想删除若干列使得每一行排完序后完全一样,编程计算最少需要删除多少列。

输入:第一行包含一个整数N(1<=N<=100000),表示表格的列数。接下来三行每行包含N个整数,每个数在1到N之间,而且第一行的数互不相同。

输出:输出最少需要删除的列数。


【思路解析】

  首先我们注意到红字部分的3行N列,它只有三行,所以我们可以直接手动处理输入:lin1/2/3[i] 表示的是第1/2/3行的第i列的数字,sum2/3[]表示的是第2,3行每个数(1-n中)出现的次数,然后我们就可以循环的去判断:如果可以下面两行有某些数出现次数为0,那么第一行的对应的数一定要删除,否则不可能完全一样,当这一列删除后可能还会导致下面两行另外的数出现的个数变为0的情况,我们可以在外面写一个do-while循环,当所有列都删完或者后两行元素都和第一行一致后,结束循环并输出答案。在while中我们可以写一个for循环从1-n(枚举第i列),如果该列已经被删掉或者该列的第一行的数下面两行都有(不需要删除)的话就跳过,反之则删除这一列:答案数加1,后面两行在这一列的数出现的个数-1,然后要把第一行该列的数记为0(以此为判断条件以便下一次循环时可以直接判断这一列是否已经删除)并且将bool变量的值定为真,说明在这一次循环中进行了操作,循环继续(注意,一定要在while循环头部把bool变量的值还原为0,否则会陷入死循环)。最后退出循环,输出答案 。


Code:

#include<iostream>
#include<cstdio>
using namespace std;
int lin1[]={},lin2[]={},lin3[]={};
int num2[]={},num3[]={};
int n,dele=,ans=;
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=;i++){
for(int j=;j<=n;j++){
if(i==) cin>>lin1[j];
else if(i==) cin>>lin2[j],num2[lin2[j]]++;
else if(i==) cin>>lin3[j],num3[lin3[j]]++;
}
}
do{
dele=;
for(int i=;i<=n;i++){
if(lin1[i]&&((!num2[lin1[i]])||(!num3[lin1[i]]))){
ans++;
lin1[i]=;
num2[lin2[i]]--;
num3[lin3[i]]--;
dele=;
}
}
}while(dele);
cout<<ans;
}

总结:该题是一道大水题,没什么知识点,就是点考验代码的实现能力,大家看看就好,毕竟我实在是太弱了。

1381. 删除 (Standard IO)的更多相关文章

  1. JZOJ 1776. 经济编码 (Standard IO)

    1776. 经济编码 (Standard IO) Time Limits: 1000 ms Memory Limits: 128000 KB Description 为降低资料储存的空间或增加资料传送 ...

  2. 1001. 温度转换 (Standard IO)

    1001. 温度转换 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   题目描述 将输入的华氏温度转换为摄氏温度.由华氏温度F与摄氏温度C的转换 ...

  3. JZOJ 2137. 【GDKOI2004】城市统计 (Standard IO)

    2137. [GDKOI2004]城市统计 (Standard IO) Time Limits: 1000 ms  Memory Limits: 128000 KB  Detailed Limits  ...

  4. JZOJ 5326. LCA 的统计 (Standard IO)

    5326. LCA 的统计 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description Input Output S ...

  5. JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)

    5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...

  6. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林 (Standard IO)

    5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...

  7. JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)

    5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...

  8. JZOJ 5257. 小X的佛光 (Standard IO)

    5257. 小X的佛光 (Standard IO) Time Limits: 2000 ms Memory Limits: 524288 KB Description Input Output Sam ...

  9. JZOJ 5258. 友好数对 (Standard IO)

    5258. 友好数对 (Standard IO) Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Description I ...

随机推荐

  1. [BZOJ2438]杀人游戏

    Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...

  2. 【五一qbxt】day7-1 引水入城

    [noip2010 洛谷p1514]引水入城 Before: 线段覆盖问题#1:(我们所需要的) 一个区间,若干条线段,现在求最少多少条线段覆盖满整个区间 区间长度8,可选的覆盖线段[2,6],[1, ...

  3. jsoncpp解析非json串

    转自:https://www.cnblogs.com/huojing/articles/5927488.html 由于Jsoncpp解析非法json时,会自动容错成字符类型.对字符类型取下标时,会触发 ...

  4. luoguP1600 天天爱跑步(NOIP2016)(主席树+树链剖分)

    阅读体验: https://zybuluo.com/Junlier/note/1303550 为什么这一篇的Markdown炸了? # 天天爱跑步题解(Noip2016)(桶+树上差分 ^ 树剖+主席 ...

  5. spark性能调优06-数据倾斜处理

    1.数据倾斜 1.1 数据倾斜的现象 现象一:大部分的task都能快速执行完,剩下几个task执行非常慢 现象二:大部分的task都能快速执行完,但总是执行到某个task时就会报OOM,JVM out ...

  6. C#设计模式:建造者模式(Builder Pattern)

    一,建造者模式(Builder Pattern) using System; using System.Collections.Generic; using System.Linq; using Sy ...

  7. 【JAVA】java中的length和length()

    参考链接: 你注意到Java中的length和length()了吗?外加一个size() java中的求长度length有时有小括号,有时没有小括号,到底什么时候该加小括号呢? 总结: Java中St ...

  8. 【记录】mysql查询语句对于为null和为空字符串给出特定值处理

    SELECT if(IFNULL(filedName,"指定字符串")="","指定字符串",filedName) '重命名的字符名' FR ...

  9. protocols - 协议定义文件

    描述 该文件为普通 ASCII 文件,它描述了 TCP/IP 子系统中各类 DARPA internet 协议族.你应该参考这个文件, 而不是使用 ARPA 的 include 文件中的号码, 更不必 ...

  10. Linux就该这么学06学习笔记

    参考链接:https://www.linuxprobe.com/chapter-06.html 1.一切从“/”开始 Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准( ...