ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SDUT 2022 Spring Team Contest——14(补题)

2022-05-18 21:00:33  阅读:204  来源: 互联网

标签:aa const 14 bb Contest int k2 补题 define


今天猛然发现上次补题博客居然是一周前???

 

(回想起上次补题的时候还是在上次)


 

 这次的训练赛打的是CCPC的题,说实话非常的坐牢(菜)


 

 

题目链接:

Problem - C - Codeforces

概述:对于每个1≤i<j≤n,输出所有的直线l和直线j相交的总数(重合算做相交)

思路分析:分析可知,对于每条直线,只有与其平行且不重合的直线不会算作总数里面

所以我们的答案就是(前面直线的总数-与其斜率相等的直线+重合的直线的数量)即为答案

用两个map分别存储与其斜率相等的直线的个数和重合的直线的个数即可。

两条直线平行——>可以用他们x,y的最简形式表示

(ps:2y=3x+7    ==    6y=9x+21    都可化成 2y=3x+7 这样最简的形式)

#include <bits/stdc++.h>
#define endl '\n'
#define x first
#define y second
#define int long long
#define SugarT ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

using namespace std;

const int N=1e5+10;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const double eps = 1e-6;

typedef pair<int, int> PII;

map<PII,int> mp;
map<pair<PII,int>,int> q;

void solve()
{
    
    int n;
    cin >> n;
    int ans=0;
    mp.clear();
    q.clear();
    
    for(int i=0;i<n;i++)
    {
        
        int x1,y1,x2,y2;
        cin >> x1 >> y1 >> x2 >> y2;
        int k1=x1-x2;
        int k2=y1-y2;
        int k3=x1*y2-x2*y1;
        int k=__gcd(k1,k2);
        k1/=k,k2/=k,k3/=k;
        
        mp[{k1,k2}]++;
        q[{{k1,k2},k3}]++;
        
        ans+=i-mp[{k1,k2}]+q[{{k1,k2},k3}];
        
    }
    
    cout << ans << endl;
    
}

signed main()
{
    SugarT
    int T=1;
        cin >> T;
    while(T--)
        solve();
    
    return 0;
        
}

题目链接:Problem - G - Codeforces

题目概述:给定n个可移动矩阵,求如何移动最小步数使得所有矩阵能够都涵盖相同一个正方形

思路:对于二维的矩阵,在x轴上和y轴上的移动轨迹是互不影响的——我们能够转化为一维问题进行考虑

之前在ACwing看到过一道板子题,做题时有印象104. 货仓选址 - AcWing题库

对于点来说:总体移动距离最小的点是按大小排序后的中点

对于线段来说:将所有线段的l,r放进排序取中点

#include <bits/stdc++.h>
#define endl '\n'
#define x first
#define y second
#define int long long
#define SugarT ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

using namespace std;

const int N=2e5+10;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const double eps = 1e-6;

struct node
{
    int a,b,c,d;
}q[N];

int aa[N],bb[N];

void solve()
{
    
    int n;
    cin >> n;
    memset(q,0,sizeof q);
    memset(aa,0,sizeof aa);
    memset(bb,0,sizeof bb);
    int c1=0,c2=0;
    for(int i=0;i<n;i++)
    {
        cin >> q[i].a >> q[i].b >> q[i].c >> q[i].d;
        aa[c1++]=q[i].a;
        aa[c1++]=q[i].c;
        bb[c2++]=q[i].b;
        bb[c2++]=q[i].d;
    }
    sort(aa,aa+c1);
    sort(bb,bb+c2);
    
    int x=aa[n-1];
    int y=bb[n-1];
    
    int ans=0;
    for(int i=0;i<n;i++)
    {
        if(q[i].a>x||q[i].c<x)
            ans+=min(abs(q[i].a-x),abs(q[i].c-x));
        if(q[i].b>y||q[i].d<y)
            ans+=min(abs(q[i].b-y),abs(q[i].d-y));
    }
    
    cout << ans << endl;
    
}

signed main()
{
    SugarT
    int T=1;
        cin >> T;
    while(T--)
        solve();
    
    return 0;
        
}

 

标签:aa,const,14,bb,Contest,int,k2,补题,define
来源: https://www.cnblogs.com/Tang-132520/p/16286271.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有