1381. 删除 (Standard IO)
题目描述:
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)的更多相关文章
- JZOJ 1776. 经济编码 (Standard IO)
1776. 经济编码 (Standard IO) Time Limits: 1000 ms Memory Limits: 128000 KB Description 为降低资料储存的空间或增加资料传送 ...
- 1001. 温度转换 (Standard IO)
1001. 温度转换 (Standard IO) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 将输入的华氏温度转换为摄氏温度.由华氏温度F与摄氏温度C的转换 ...
- JZOJ 2137. 【GDKOI2004】城市统计 (Standard IO)
2137. [GDKOI2004]城市统计 (Standard IO) Time Limits: 1000 ms Memory Limits: 128000 KB Detailed Limits ...
- JZOJ 5326. LCA 的统计 (Standard IO)
5326. LCA 的统计 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description Input Output S ...
- JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)
5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...
- JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林 (Standard IO)
5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...
- 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 ...
- JZOJ 5257. 小X的佛光 (Standard IO)
5257. 小X的佛光 (Standard IO) Time Limits: 2000 ms Memory Limits: 524288 KB Description Input Output Sam ...
- JZOJ 5258. 友好数对 (Standard IO)
5258. 友好数对 (Standard IO) Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Description I ...
随机推荐
- centos下Linux C语言MD5的使用
在Linux C变成中用到MD5加密会使用到openssl库,下面给出的是一个简单的小Demo: #include <stdio.h> #include <openssl/md5.h ...
- Cannot modify header information - headers already sent by出错的原因
<?php ob_start(); setcookie("username","送家",time()+3600); echo "the user ...
- C# 跨线程调用控件的4中方法
原文:C# 跨线程调用控件 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应. 同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线 ...
- JVM(5)之 GC之标记
开发十年,就只剩下这套架构体系了! >>> 堆分为年轻代和年老代.永久代是非堆内存,它又叫做方法区(一般的说法),主要存储已被加载的类信息.常量.静态变量.而该区域在java ...
- 20191114PHP文件操作
<meta charset="utf-8"><?php// $fn=fopen("c:\\abc.txt","w"); / ...
- Win10电脑查看已连接过WiFi密码的命令
运行中输入CMD,回车,打开命令行窗口. 输入:netsh wlan show profiles 执行后,会列出搜友已连接过的WiFi名字: 输入:netsh wlan show profile ...
- css3系列--概述
CSS3分成了不同类别,称为“modules”.而每一个“modules”都有于CSS2中额外增加的功能,以及向后兼容.CSS3早于1999年已经开始制订.[18]直到2011年6月7日,CSS 3 ...
- 使用jstack排查线程问题
以一个例子来演示排查服务器cpu占用率过高的问题. 准备 将下面的代码文件上传到服务器上,然后使用javac编译,并使用java命令将程序跑起来. public class JStackCase { ...
- Morphia开发简介
1. 什么是Morphia Morphia是一个开放源代码的对象关系映射框架,它对MongoDB数据库 java版驱动进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵 ...
- UVA11540 Sultan's Chandelier Burnside 引理 + DP
题目传送门 https://vjudge.net/problem/UVA-11540 https://uva.onlinejudge.org/index.php?option=com_onlineju ...