社区讨论

求助啊

P2652同花顺参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6xjsz2
此快照首次捕获于
2025/11/20 12:27
4 个月前
此快照最后确认于
2025/11/20 12:27
4 个月前
查看原帖
我这份代码哪里错啦有木有dalao帮帮我
我还只是个孩子啊救救孩子
CPP
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int size = 100005;
struct card {
    int color,num;
    bool operator < (const card k) const {
        if(color == k.color) return num < k.num;
        return color < k.color;
    }
    card() {
        color = num = 0;
    }
    card(int a,int b) {
        color = a;
        num = b;
    }
} data[size];
int n,cnt,from[size],val[size];
inline int MIN(int a,int b) {
    return a < b ? a : b;
}
inline int MAX(int a,int b) {
    return a > b ? a : b;
}
bool changed[size];
int getans(int k) {
    int l = from[k],r = from[k] + val[k] - 1,change = 0;
    for(int i = l + 1;i <= r;i++)
        if(data[i].num == data[i - 1].num) {
            changed[i] = true;
            change++;
        }
    int res = 0;
    for(int i = l;i <= r;i++) {
        int need = 1,m = data[i].num + n - 1;
        for(int j = i + 1;j <= r;j++) {
            if(data[i].num > m) break;
            else if(changed[i]) continue;
            else need++;
        }
        res = MAX(res,need);
    }
    return n - res + change;
}
int main() {
    scanf("%d",&n);
    for(int i = 1;i <= n;i++) {
        int a,b; scanf("%d%d",&a,&b);
        data[i] = card(a,b);
    }
    sort(data + 1,data + 1 + n);
    for(int i = 1;i <= n;i++) {
        from[++cnt] = i;
        val[cnt] = 1;
        while(data[i + 1].color == data[from[cnt]].color) {
            val[cnt]++;
            i++;
        }
    }
//	for(int i = 1;i <= cnt;i++)
//		printf("%d %d\n",from[i],val[i]);
    int ans = n;
    for(int i = 1;i <= cnt;i++) {
        ans = MIN(ans,getans(i));
    }
    if(ans == 8) printf("9\n");
    else printf("%d\n",ans);
}
好人一生平安OTZSTO

回复

1 条回复,欢迎继续交流。

正在加载回复...