这题模拟起来没有想到很好的方法 我的模拟方法是先枚举花色 然后用visit数组记录当前花色的点数 最后滑动窗口统计个数 时间复杂度和编写难度上都还可以
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
#include<set>
#define scnaf scanf
#define cahr char
#define bug puts("bugbugbug");
using namespace std;
typedef long long ll;
const int maxn=1e5+15;
const int inf=1e9;
struct T
{
char ch;
int v;
} a[10];
int main()
{
int T_T;
scanf("%d",&T_T);
while(T_T--)
{
char cha;
for(int i=0; i<5; i++)
while(cha=getchar())
{
if(cha!=' '&&cha!='\n')
{
a[i].ch=cha;
scanf("%d",&a[i].v);
break;
}
}
int ans=0;
for(int i=0;i<4;i++)
{
char now='A'+i;
int visit[18]={0};
for(int j=0;j<5;j++)
if(a[j].ch==now)
visit[a[j].v]=1;
if(visit[1]) visit[14]=1;//有1就相当于有14
int maxx=0;
for(int i=1;i<=5;i++)
maxx += visit[i];
ans=max(maxx,ans);
for(int i=1;i+5<=14;i++)
{
maxx+=visit[i+5];
maxx-=visit[i];
ans=max(maxx,ans);
}
}
printf("%d\n",5-ans);
}
}