社区讨论

0分 求助 回帖子的能发财

P2652同花顺参与者 5已保存回复 6

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@mhk6y3sr
此快照首次捕获于
2025/11/04 14:31
4 个月前
此快照最后确认于
2025/11/04 14:31
4 个月前
查看原帖
so RE出现的情况除了越界还有哪些
首先来说一下我的思路(代码)
用结构体存数据,排序
花色小到大排序,数字小到大排序
最后unique一下(去重)
两个指针,尺取法
在相同花色中,r(right)在后面,l(left)在前面
当r知道的数字减去l指到的数字小于等于4的时候,用maxx来记录一下(取最大值)
我的代码讲解完了,现在求调
谢谢大佬\color{red} 谢谢大佬
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int n,l=1,r=2,maxx=0;
struct item{
	int color;
	int num;
	bool operator == (const item &n1) const{
    return num==n1.num&&color==n1.color;
  }
}a[(int)1e5+1000];//结构体
bool cmp(item A,item B){
	if(A.color==B.color){
		return A.num<B.num;
	}
	return A.color<B.color;
}//排序
int main(){
	scanf("%d",&n);
	if(n==0){
		printf("5");
		return 0;
	}
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i].color,&a[i].num);
	}
	sort(a+1,a+1+n,cmp);
	int len=unique(a+1,a+1+n)-a-1;//前面都是输入输出加上排序哈
	while(1){
		while(r-1>l&&a[r].num-a[l].num>4)l++;
		if(a[r].color!=a[l].color){
			l=r;
			r++;
			continue;
		}
		if(a[r].num-a[l].num<=4)maxx=max(r-l,maxx);
		if(maxx==4)break;
		if(r-1==l&&r==len)break;
		if(r<len)r++;
		else l++;
	}
	printf("%d",4-maxx);//只要有1张牌,输出就是4
	return 0;
}
此代码提交后:

回复

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

正在加载回复...