SDUT 2020 Summer Individual Contest - 5(for 19) Div.1题解

自己太菜了,就做出了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; 我目前还没搞明白

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值