天天看點

入門OJ 4242: [Noip模拟題]删除 (暴力)

題目

Description

Alice上化學課時又分心了,他首先畫了一個

3

N

列的表格,然後把數字

1

N

填入表格的第一行,保證每個數隻出現一次,另外兩行他也填入數字

1

N

,但不限制每個數字的出現次數。Alice現在想删除若幹列使得每一行排完序後完全一樣,程式設計計算最少需要删除多少列。

Input

第一行包含一個整數

N

(

1<=N<=100000

),表示表格的列數。

接下來三行每行包含

N

個整數,每個數在

1

N

之間,而且第一行的數互不相同。

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;
}                

轉載于:https://www.cnblogs.com/forth/p/9532957.html