社区讨论
求助啊
P2652同花顺参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6xjsz2
- 此快照首次捕获于
- 2025/11/20 12:27 4 个月前
- 此快照最后确认于
- 2025/11/20 12:27 4 个月前
我这份代码哪里错啦有木有dalao帮帮我
#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 条回复,欢迎继续交流。
正在加载回复...