A. Vasya and Book:
题目
思路:
分三种情况讨论
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
typedef long long ll;
int main()
{
ll t,n,x,y,d;
scanf("%lld",&t);
while (t--)
{
scanf("%lld%lld%lld%lld",&n,&x,&y,&d);
ll Min=0x3f3f3f3f3f;
if(abs(y-1)%d&&abs(n-y)%d&&abs(x-y)%d)
{
printf("-1\n");
continue;
}
if(x==y)
{
printf("0\n");
continue;
}
if(abs(x-y)%d==0)
{
Min=min(Min,abs(x-y)/d);
}
if(abs(y-1)%d==0)
{
ll t=abs(y-1)/d;
if(abs(x-1)%d==0)
t=t+abs(x-1)/d;
else
t=t+abs(x-1)/d+1;
Min=min(Min,t);
}
if(abs(y-n)%d==0)
{
ll t=abs(y-n)/d;
if(abs(x-n)%d==0)
t=t+abs(x-n)/d;
else
t=t+abs(x-n)/d+1;
Min=min(Min,t);
}
printf("%lld\n",Min);
}
return 0;
}
B. Vova and Trophies
题目:
思路:
模拟。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=2*10e5+5;
char s[maxn];
int numa=0,numb=0,loc;
int len;
int main()
{
scanf("%d",&len);
scanf("%s",s);
for (int i=0;i<len;i++)
{
if(s[i]=='G')
{
numa++;
loc=i;
}
else
{
numb++;
}
}
if(numa==0)
{
printf("0\n");
}
else if(numb==0)
{
printf("%d\n",len);
}
else
{
int tlen=0,flag=0;
int Max=-0x3f3f3f3f;
for (int i=0;i<len;i++)
{
if(s[i]=='G')
{
tlen++;
}
else
{
//int tnuma=numa-tlen;
if(numa-tlen>0)
{
numa-=tlen;
tlen++;
int j=i+1;
for (;j<len;j++)
{
if(s[j]=='S'||j==loc)
break;
tlen++;
}
}
Max=max(Max,tlen);
tlen=0;
}
}
printf("%d\n",Max);
}
return 0;
}