自己太菜了,就做出了2个题,下面是按我做题顺序写的
J - Time Limit
这题挺简单,就是按照题目要求模拟就行,但是没看到是偶数,所以错了1次`
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
int main()
{
int t,n,i,ans;
int a[1000];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
ans=a[1]*3;
for(i=2;i<=n;i++)
{
ans=max(ans,a[i]+1);
}
if(ans%2==1)
ans++;
printf("%d\n",ans);
}
return 0;
}
G - Radar Scanner
题意:大概是给你n个矩形,让你找一个方格把他们移动过去能重合且移动步数最少
这题如果两个点移动到某个位置重合,最短距离就是他们的中间位置,所以我们找出来所有点的中间位置就行,然后依次遍历所有的到中间位置的距离。因为是一个矩形,所以我们用矩形离点较劲的那个顶点
这个题WA了很多次,前面由于数组开小了一直Time limit
后来把数组开到足够大,又成了Wrong answer ,错了n次后发现ans用int不行,要用long long。。。
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
int x[200010],y[200010],x1[200010],y3[200010],x2[200010],y2[200010];
int main()
{
int t,n,i,j;
ll ans;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
j=1,ans=0;
for(i=1; i<=n; i++)
{
scanf("%d%d%d%d",&x1[i],&y3[i],&x2[i],&y2[i]);
x[j]=x1[i];
y[j]=y3[i];
j++;
x[j]=x2[i];
y[j]=y2[i];
j++;
}
sort(x+1,x+2*n+1);
sort(y+1,y+2*n+1);
for(i=1; i<=n; i++)
{
if(x1[i]<x[n]&&x2[i]<x[n])
ans=ans+x[n]-x2[i];
else if(x1[i]>x[n]&&x2[i]>x[n])
ans=ans+x1[i]-x[n];
if(y3[i]<y[n]&&y2[i]<y[n])
ans=ans+y[n]-y2[i];
else if(y3[i]>y[n]&&y2[i]>y[n])
ans=ans+y3[i]-y[n];
}
printf("%lld\n",ans);
}
return 0;
}
C - Line-line Intersection
尝试做C题,大概意思就是给你一些直线,让你判断有多少有交点,重合也算。没做出来,现在去看其他人的题解,说精度卡的很死,用斜率不对,要用Ax+By+C=0; 我目前还没搞明白