P2652 同花顺
P2652 同花顺
乱搞的题。
先按花色为第一关键字,以权值大小为第二关键字排个序,然后求出同种花色中最长的连续的牌数,用总的牌数减去即可。
一定要记得去重。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
inline int read() {
int s = 0, f = 1; char ch = getchar();
while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9') { s = (s << 1) + (s << 3) + (ch ^ 48); ch = getchar(); }
return s * f;
}
const int N = 1e5 + 5;
int n, cnt, ans;
struct card { int col, num; } a[N], b[N];
int cmp(card a, card b) { if(a.col == b.col) return a.num < b.num; else return a.col < b.col; }
int main() {
n = read();
for(int i = 1;i <= n; i++) a[i].col = read(), a[i].num = read();
sort(a + 1, a + n + 1, cmp);
for(int i = 1;i <= n; i++) {
if(a[i].col == a[i - 1].col && a[i].num == a[i - 1].num) continue;
b[++cnt].col = a[i].col; b[cnt].num = a[i].num;
}
for(int i = 1;i <= cnt; i++) {
int tmp = 0;
for(int j = i;j >= 1; j--) {
if(b[j].col == b[i].col && b[i].num - b[j].num + 1 <= n) tmp++;
else break;
}
ans = max(ans, tmp);
}
printf("%d", n - ans);
return 0;
}