题目链接:https://vjudge.net/problem/ZOJ-4034
题目思路:简单模拟,主要数据有
1 100
W
2 100
W
C 100
3 100
C 100
C 1
C 2
3 100
C 100
W
D 100
4 100
C 100
B 1
W
D 100
3 100
C 100
B 1
B 2
3 100
C 100
C 1
W
4 100
C 100
C 1
W
B 1
AC代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long num[1000000];
long long n,m;
int main()
{
int t;
scanf("%d",&t);
map<char,int>maps;
maps['C']=0;
maps['B']=1;
maps['D']=2;
while(t--)
{
long long pos=-1;
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)
{
char x;
cin>>x;
if(x=='W')
{
pos=i;
num[i]=10000000000;
}
else
{
long long y;
scanf("%lld",&y);
num[i]=maps[x]*m+y;
}
}
long long ans=0;
if(n==1)
printf("%lld\n",3*m);
else
{
if(pos==-1)
{
if(num[1]>num[2])
printf("1\n");
else
printf("%lld\n",3*m-n+1);
}
else
{
if(pos>2)
{
if(num[1]>num[2])
printf("1\n");
else
{
long long l=pos-1<1?0:num[pos-1];
long long r=pos+1>n?3*m+1:num[pos+1];
printf("%lld\n",r-l-1);
}
}
else
{
long long l=pos-1<1?0:num[pos-1];
long long r=pos+1>n?3*m+1:num[pos+1];
ans=r-l-1;
if(pos==2&&r>l)
ans++;
printf("%lld\n",ans);
}
}
}
}
return 0;
}