首页 > 其他分享 >YACS 2023年8月月赛 甲组 T2 直线整点 题解

YACS 2023年8月月赛 甲组 T2 直线整点 题解

时间:2023-08-27 12:12:10浏览次数:40  
标签:YACS int 题解 ans mid 甲组 double x1 check

简单题,先二分出直线上 $x$ 最小的点使得这个点在矩形内。

然后不断跳,直到遇到整点。(实际上要用扩欧,但初测能过于是就偷个懒没写) 

接着不断跳直到不符合条件。

先 $\sqrt{V}$ 个跳一下,跳完后再一个一个跳就不用写二分了多好。

代码:

#include<iostream>
#define int long long
using namespace std;
double a,b,c,k;
double x1,x2,y1,y2;
int gcd(int a,int b){
    if(b==0)return a;
    return gcd(b,a%b);
}
double check(int mid){return (-a*mid-c)/b;}
//-a*x%b==c
signed main(){
    cin>>a>>b>>c>>x1>>x2>>y1>>y2;
    //b/gcd(a,b);
    int l=x1,r=x2,mid;
    if((a>0)^(b>0))k=1;
    else k=-1;
    while(l<=r){
        mid=l+r>>1;
        double y=check(mid);
        if(y<y1){
            if(k==-1)r=mid-1;
            else l=mid+1;
        }else if(y>y2){
            if(k==-1)l=mid+1;
            else r=mid-1;
        }else r=mid-1;
    }
    double y=-a/b*(r+1)-c/b;
    if(y<y1||y>y2){
        cout<<0;
        return 0;
    }
    int ans=r+1,sum=0,d=(int)(b)/gcd(a,b);
     while((int)(-a*ans-c)%(int)b!=0)++ans;
    if(ans<x1)ans+=d;
    if(ans>x2){
        cout<<0;
        return 0;
    }
    sum=1;
    int t=(int)(b)/gcd(a,b);

    if(t<0)t=-t;
    while(ans+31622*t<=x2&&ans+31622*t>=x1&&check(ans+31622*t)>=y1&&check(ans+31622*t)<=y2){
        ans+=31622*t;
        sum+=31622;
    }
    while(ans+t<=x2&&ans+t>=x1&&check(ans+t)>=y1&&check(ans+t)<=y2){
        ans+=t;
        ++sum;
    }
    cout<<sum;
    return 0;
}

 

标签:YACS,int,题解,ans,mid,甲组,double,x1,check
From: https://www.cnblogs.com/Xy-top/p/17660110.html

相关文章

  • UVA908[Re-connecting Computer Sites]题解
    原题1.题意分析题意就是给你很多组数,对于每组数,有三组小数据。第一组小数据先输入一个n表示顶点数,然后再输入n-1条边表示初始边数。其它组小数据先输入一个数k,表示增加的边的数量,然后再输入k条边,表示增加的边。在输入第二组小数据时,要先把边清空,重新输入,但是边的数量不变。2.做......
  • 题解:城市
    题目链接你说得对,但是不如换根。换根是由原先的树形DP简单变换而来,故事发生在这道叫做《城市》的题目中,在这里你妄图求解每个点到树中其它所有节点的距离,即\(f_i=\sum_{j=1}^ndis_{i\toj}\)。可以一次dfs求解出\(f_{root}\),然后我们发现走过一条边\((u,v,w)\)会使......
  • LGR-156-Div.3 题解
    LGR-156-Div.3题解洛谷网校8月普及组月赛I&MXOIRound1&飞熊杯#2第一次AK一个比赛!而且排名这么靠前!!!T1宝箱题目链接思路注意到答案有两种情况。1.从原点走到\(a\),再从\(a\)走到\(b\),2.从原点走到\(b\),再从\(b\)走到\(a\)。取一个最小值即可。代码int......
  • react-pdf在部分iOS手机上加载pdf失败问题解决
    最近项目快结束了,测试提了一个bug,iOS手机上加载pdf一直在转圈,加载不出来内容。看到这个bug,在电脑上和安卓手机上没有问题,iOS手机中打开确实又问题,初步确定为app问题。我们的项目是集成在客户的app里的,可能是app内的WebView和Safari有一些差异导致的问题。首先直接在iOS手机上用a......
  • 力扣-2. 两数相加(C++题解)
    题目链接:https://leetcode.cn/problems/add-two-numbers/description/给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之......
  • 关于自建Rustdesk 远程桌面服务器的公网访问:无法连接中继服务器的问题解决方法
    自建服务器位于内网时,内网客户端ID/中继的地址通常写成内网IP,外网客户端一般会用公网IP进行端口映射,但这样设置出现外网客户端无法连接中继服务器,但内网客户端使用正常的现象。经过半天的排查分析,当内网和外网填写的自定义服务器地址时,rust服务器无法识别出需要使用nat包的地址,默......
  • P1848 Bookshelf G 题解
    这是本蒟蒻写的第一篇题解(写不好请指出)很明显他是一道dp题,因为第i本书放哪里只跟前i-1本树的放法有关系。我们可以是定义f[i][j]表示放了i本书,最后一层书架是以第j本书开始的。那么有动态转移方程:\(f[i][i]=min(f[i-1][j])+hi,w[j]+...+w[i-1]<=L\)\(f[i][j]=f[i-1][j]+max(0......
  • 力扣-228. 汇总区间(C++题解)
    题目链接:https://leetcode.cn/problems/summary-ranges/description/给定一个 无重复元素的 有序整数数组\(nums\)。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,\(nums\)的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于\(......
  • P2151 [SDOI2009] HH去散步 题解
    传送门简要题意:有\(n\)个人,\(m\)条无向边,走\(e\)条边,满足条件若第\(i\)条边为\(u->v\)则第\(i+1\)条边不能是\(v->u\),问\(s->t\)的方案有多少个,取模45989。因为要满足题目关于边的条件,所以我们考虑点边互换。将\(u-v\)的无向边一分为二变成\(u->v,v->u\),第\(i\)条边记录两个变......
  • 【题解】CF1413C Perform Easily(双指针)
    【题解】CF1413CPerformEasily写篇题解水水经验~顺便增加一下RP~比较套路和简单的一道绿题。题目链接PerformEasily-洛谷|计算机科学教育新生态(luogu.com.cn)题意概述给你一个长度为\(6\)的\(a\)数组,和一个长度为\(n\)的\(b\)数组,要求将\(b\)数组内的每......