码迷,mamicode.com
首页 > 其他好文 > 详细

入门OJ 4242: [Noip模拟题]删除

时间:2018-08-25 11:20:41      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:模拟题   can   turn   化学   main   cst   ice   input   ++i   

题目

Description

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

Input

第一行包含一个整数N(1<=N<=100000),表示表格的列数。

接下来三行每行包含N个整数,每个数在1N之间,而且第一行的数互不相同。

Output

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

题解

水题

每次找第一行中第二行第三行没有的删掉

当枚举一遍没有删除时输出答案

代码

#include <cstdio>
using namespace std;
int n, row1[100010], row2[100010], row3[100010], count2[100010], count3[100010], tmp, ans;
int main(int argc, char **argv) {
  scanf("%d", &n);
  for (register int i(0); i < n; ++i) {
    scanf("%d", &row1[i]);
  }
  for (register int i(0); i < n; ++i) {
    scanf("%d", &row2[i]), ++count2[row2[i]];
  }
  for (register int i(0); i < n; ++i) {
    scanf("%d", &row3[i]), ++count3[row3[i]];
  }
  register int finish_flag(0);
  while (!finish_flag) {
    finish_flag = 1;
    for (register int i(0); i < n; ++i) {
      if (row1[i] && !(count2[row1[i]] && count3[row1[i]])) {
        finish_flag = 0;
        ++ans;
        row1[i] = 0;
        --count2[row2[i]], --count3[row3[i]];
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}

入门OJ 4242: [Noip模拟题]删除

标签:模拟题   can   turn   化学   main   cst   ice   input   ++i   

原文地址:https://www.cnblogs.com/forth/p/9532957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!