Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)

因为C题卡住了,这次炸了.

我以为模拟肯定T了,所以就写了拓展欧几里得.

然后就被欧几里得坑了.


用拓展欧几里得做,要把横向和纵向运动分开.

x轴:

f(x)=t%2n,2nt%2n

y轴:
f(x)=t%2m,2mt%2m

然后把这两个公式展开一下,在拓展欧几里得求一下就完事了.

(调试出翔)

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long longl;
const longl INF=1LL<<60;

template <class T> void put(T x) {
    if (x==0) {
        return;
    }
    put(x/10);
    putchar(x%10^48);
}
template <class T> void print(T x) {
    if (x<0) {
        putchar('-'),x=-x;
    } else if (x==0) {
        putchar('0');
        return;
    }
    put(x);
}

int exgcd(int a,int b,int &x,int &y) {
    if(b==0) {
        x=1;y=0;
        return a;
    }
    int r=exgcd(b,a%b,x,y);
    longl t=x;x=y;y=t-1LL*a/b*y;
    return r;
}

int N,M;
int n,m,k;
int x,y,gcd;

longl solve(int a,int b) {
    if ((b-a)%gcd) return INF;
    int t=(b-a)/gcd;
    longl k=1LL*x*t;
    k=(k%m+m)%m;
    return 2LL*N*k+a;
}

int main() {
    int n,m,k;
    cin>>n>>m>>k;
    N=n,M=m;
    n<<=1,m<<=1;
    gcd=exgcd(n,m,x,y);
    n/=gcd,m/=gcd;
    ::n=n,::m=m;
    exgcd(n,m,x,y);
    for (int a,b,i=1;i<=k;++i) {
        longl t=INF;
        scanf("%d%d",&a,&b);
        t=min(t,solve(a,b));
        t=min(t,solve(a,2*M-b));
        t=min(t,solve(2*N-a,b));
        t=min(t,solve(2*N-a,2*M-b));
        if (t==INF) puts("-1");
        else print(t),putchar('\n');
    }
    return 0;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值