9.10 第一题 方程的解 题解

  这道题当时感觉是一道几乎纯考扩展欧几里得的题,然而板子忘了……于是乎这道题被我放在第二个打。

  不得不说出题人相当良心,给了大把的暴力分前20分就是c-1,20~40暴力枚举,40~60输出1。白送的60分就到手了。

  然而难得是后40分,我们可以先通过扩展欧几里得先求出x最小整数解,然后首先,自己本身就无解的方程输出0就好了,其次,如果a,b中有一个为零那么就是无限解如果都为0就看c,如果异号就是无限解等等等等特判,然后就没什么了,注意要开long long,细节真心坑,而且特判的顺序也极其重要。

  

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #include<algorithm>
 7 #include<cmath>
 8 #include<vector>
 9 using namespace std;
10 int a,b,c,t;
11 long long x,y;
12 int exgcd(int a,int b,int c,long long &x,long long &y)
13 {
14     if(!b)
15     {
16         y=0;
17         x=c/a;
18         return a;
19     }
20     int t=exgcd(b,a%b,c,y,x);
21     y-=(a/b)*x;
22     return t;
23 }
24 int main()
25 {
26     scanf("%d",&t);
27 while(t--)
28 {
29     scanf("%d%d%d",&a,&b,&c);
30     if((!a)&&(!b))
31     {
32         if(!c)
33             printf("ZenMeZheMeDuo\n");
34         else
35             printf("0\n");
36         continue;
37     }
38     if(c<0)
39         a=-a,b=-b,c=-c;
40     bool fa=0,fb=0;
41     if(a<0)
42     {
43         a=-a;fa=1;
44     }
45     if(b<0)
46     {
47         b=-b;fb=1;
48     }
49     long long x,y;
50     int gy=exgcd(a,b,c,x,y);
51     if(a*x+b*y!=c)
52     {
53         printf("0\n");
54         continue;
55     }
56     if(fa)a=-a,x=-x;
57     if(fb)b=-b,y=-y;
58     if(a==0)
59     {
60         if(y<=0) printf("0\n");
61         else printf("ZenMeZheMeDuo\n");
62         continue;
63     }
64
65     if(b==0)
66     {
67         if(x<=0) printf("0\n");
68         else printf("ZenMeZheMeDuo\n");
69         continue;
70     }
71     if((a>0&&b<0)||(a<0&&b>0))
72     {
73         printf("ZenMeZheMeDuo\n");
74         continue;
75     }
76     if(a<0) a=-a,b=-b,c=-c;
77     a/=gy,b/=gy,c/=gy;
78     x%=b;
79     while(x<=0)x+=b;
80     int t=(c-a*x)/b;
81     long long my=t%a;
82     while(my<=0) my+=a;
83     int ans=0;
84     if(my<=t) ans=(t-my)/a+1;
85     if(ans<=65535)printf("%d\n",ans);
86     else printf("ZenMeZheMeDuo\n");
87 }
88     return 0;
89 }

时间: 2024-10-27 19:57:36

9.10 第一题 方程的解 题解的相关文章

方程的解题解和扩欧的一些总结

题目描述 给出一个二元一次方程ax+by=c,其中x.y是未知数,求它的正整数解的数量. 输入输出格式 输入格式: 第一行一个整数T,表示有T组数据.接下来T行,每行3个整数a.b.c. 输出格式: 输出T行,每行一个数,表示方程解的数量.如果正整数解的数量比65535还多输出"ZenMeZheMeDuo". 题解 这个题一看就要先用扩展欧几里得求出一组x最小的整数解然后再计算出所有的解. 代码 1 #include<bits/stdc++.h> 2 using names

课本P364 15.10第一题 作业

public class ZuoYe extends Thread { public void run(){ for(int i=1;i<=10;i++) { System.out.println("我爱你,么么哒!"+i); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } public static void

MSC阿里比赛第一题详解

第一题思路 图/文 听鬼哥说故事 0x1:前言 晚上8点等了会儿,大家都登录不上,于是带着群里的小伙伴愉快的去打游戏了,10点左右kanxue老大说可以正常登录了,不过在家里养病,医生让睡得早,于是告知几个群里的小伙伴后就去睡觉了.早上醒来发现可以正常登录了,很多人都分析出来了,那么我就开始分析吧. 直接上文档,比较详细: 链接:http://pan.baidu.com/s/1bnpkWzl 密码:roii

纪中10日T1 2300. 【noip普及组第一题】模板题

2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 输入 输出 样例输入 样例输出 数据范围限制 朴素算法 考试开始的前一个小时我一直在折腾朴素算法 -> 对拍 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 #define IL inline 4 usin

POJ 1830 【高斯消元第一题】

首先...使用abs()等数学函数的时候,浮点数用#include<cmath>,其它用#include<cstdlib>. 概念: [矩阵的秩] 在线性代数中,一个矩阵A的列秩是A的线性无关的纵列的极大数目.类似地,行秩是A的线性无关的横行的极大数目. 此题如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择,既1 << n 对于r以下的行,必定全是0,那么如果a[i][n]!=0 必然出现矛盾,于是判定无解. 1 #include <iostr

【BZOJ4927】第一题 双指针+DP(容斥?)

[BZOJ4927]第一题 Description 给定n根直的木棍,要从中选出6根木棍,满足:能用这6根木棍拼 出一个正方形.注意木棍不能弯折.问方案数. 正方形:四条边都相等.四个角都是直角的四边形. Input 第一行一个整数n. 第二行包含n个整数ai,代表每根木棍的长度. n ≤ 5000, 1 ≤ ai ≤ 10^7 Output 一行一个整数,代表方案数. Sample Input 8 4 5 1 5 1 9 4 5 Sample Output 3 题解:这...这不是沈阳集训的原

LeetCode 第一题,Two Sum

今天早上起来去机房的路上还在想,一直不做算法题老是觉得不踏实.做做题总是让自己觉得自己真的在做做学习.... 这也算是一种强迫症吧. 那就从今天开始做做LeetCode,因为好久没做过了,所以第一题还是看了别人的题解和思路,算是找找感觉. 总的来说第一题是个水.... 题目还原 Two Sum Given an array of integers, find two numbers such that they add up to a specific target number. The fu

2014百度之星第一题Energy Conversion

Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7787    Accepted Submission(s): 1894 Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量

扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)

题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000