比赛连接
B Lin88’s Palindrome
难点主要在于判断回文串的方式 单个字母判断就会超时
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=2e5+5;
int len,cnt=0;
char s[100010];
void init()
{
for(int i=0;i<len/2;i++)
{
if(s[i] == s[len-1-i])
cnt++;
}
}
int Judge(int x,char c)
{
int f=0;
if(s[x-1] == s[len-x])
f=1;
s[x-1]=c;
if(s[x-1] == s[len-x])
{
if(f == 0)
cnt++;
}
else
{
if(f == 1)
cnt--;
}
if(cnt == len/2)
return 1;
else
return 0;
}
int main()
{
int t,x;
char c;
scanf("%s",s);
scanf("%d",&t);
len=strlen(s);
init();
for(int i=0;i<t;i++)
{
scanf("%d %c",&x,&c);
int ans=Judge(x,c);
if(ans == 0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
C Compute’s Matrix
没啥说的 简单数学题
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e9+7;
int main()
{
LL t,n,x1,y1,x2,y2,x,y,ans;
scanf("%lld",&t);
while(t--)
{
scanf("%d%d%d%d%d",&n,&x1,&y1,&x2,&y2);
x=(x2*x2-x1*x1+x1+x2)/2%maxn;
y=(y2*y2-y1*y1+y1+y2)/2%maxn;
ans=x*y%maxn;
printf("%lld\n",ans);
}
return 0;
}
F Ssyze’s Hard Drive
利用sort排序 找出初始位置到开头或结尾的最短路径再加上公共部分即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=2e6+5;
LL a[maxn];
int main()
{
int n;
LL s,ans;
scanf("%d%lld",&n,&s);
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
sort(a,a+n);
ans=min(abs(s-a[0]),abs(s-a[n-1]));
ans+=a[n-1]-a[0];
printf("%lld",ans);
return 0;
}