当前位置: 代码迷 >> 综合 >> SDUT 2020 Summer Individual Contest - 5(for 19) Div.1题解
  详细解决方案

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

热度:98   发布时间:2024-01-14 21:05:25.0

自己太菜了,就做出了2个题,下面是按我做题顺序写的

J - Time Limit

这题挺简单,就是按照题目要求模拟就行,但是没看到是偶数,所以错了1次`

#include <bits/stdc++.h>#define ll long long
#define ull unsigned long longusing 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 longusing 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; 我目前还没搞明白

  相关解决方案