zoukankan      html  css  js  c++  java
  • 考试

    方程的解
    【题目描述】
     给出一个二元一次方程 ax+by=c,其中 x、y 是未知数,求它的正整数解的
    数量。
    【输入格式】
     第一行一个整数 T,表示有 T 组数据。接下来 T 行,每行 3 个整数 a、b、c。
    【输出格式】
     输出 T 行,每行一个数,表示方程解的数量。如果正整数解的数量比
    65535 还多,输出“ZenMeZheMeDuo”。
    【样例输入】
    3
    -1 -1 -3
    1 1 65536
    1 1 65537
    【样例输出】
    2
    65535
    ZenMeZheMeDuo
    【数据规模与约定】
    20%的数据,a=b=1
    40%的数据,T≤100,1≤a,b,c≤1000
    另 20%的数据,a+b=c,1≤a,b,c≤1,000,000
    另 20%的数据,1≤a,b,c≤1,000,000
    100%的数据,T≤10000,-1,000,000≤a,b,c≤1,000,000
    

     这有可能是noip前倒数第二场考试了

       只是一道很简单的模拟题

       求一下gcd然后进行特判即可

       代码如下

       

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 inline ll read(){
     5     ll x=0;int f=1;char ch=getchar();
     6     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
     7     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
     8     return x*f;
     9 }
    10 namespace solution{
    11     ll a,b,c,x,y,T,k;
    12     inline void extent_gcd(ll aa,ll bb){
    13         if(bb==0){
    14             x=1;y=0;k=aa;return;
    15         }
    16         extent_gcd(bb,aa%bb);
    17         int t=x;
    18         x=y;
    19         y=t-aa/bb*y;
    20     }
    21     void init(){
    22         T=read();
    23     }
    24     void solve(){
    25         while(T--){
    26             a=read();b=read();c=read();
    27             if(a==0){
    28                 if(c%b==0&&c/b>=0) cout<<1<<endl;
    29                 else cout<<0<<endl;
    30                 continue;
    31             }
    32             if(b==0){
    33                 if(c%a==0&&c/a>=0) cout<<1<<endl;
    34                 else cout<<0<<endl;
    35                 continue;
    36             }
    37             if((a<=0&&b<=0&&c>=0)||(a>=0&&b>=0&c<=0)){
    38                 if(a==0&&b==0&&c==0){
    39                     printf("ZenMeZheMeDuo
    ");
    40                 }
    41                 else printf("0
    ");
    42                 continue;
    43             }
    44             extent_gcd(a,b);
    45             //cout<<a*x+b*y<<endl;
    46             //cout<<k<<endl;
    47             a/=k;b/=k;c/=k;
    48             //cout<<a<<' '<<b<<' '<<c<<endl;
    49             x*=c;y*=c;//cout<<x<<' '<<y<<endl;
    50             int ta;
    51             if(y<=0) ta=y/a-1,x+=ta*b,y=y%a+a;    
    52             if(x<=0){
    53                 printf("0
    ");
    54                 continue;
    55             }
    56             if(b>0&&a>0||b<0&&a<0){
    57              if(x/abs(b)+1>65535) printf("ZenMeZheMeDuo
    ");
    58              else printf("%lld
    ",x/abs(b)+1);
    59              continue;
    60             }
    61             if((b>0&&a<0)||(a>0&&b<0)){
    62                    printf("ZenMeZheMeDuo
    ");
    63                    continue;
    64             }
    65             //int minn=10000000;
    66             //minn=min(minn,c/)
    67         }
    68     }
    69 }
    70 int main(){
    71     //freopen("fuction.in","r",stdin);
    72     //freopen("fuction.out","w",stdout);
    73     using namespace solution;
    74     init();
    75     solve();
    76     return 0;
    77 }
  • 相关阅读:
    Ubuntu Server下docker实战 02: docker进阶配置
    Ubuntu Server下docker实战 01: 安装docker
    简单一个方法实现商品组合管理--递归笛卡尔
    Little-Endian小字节序
    BinaryWriter和BinaryReader用法
    C#位运算
    TCP协议三次握手过程分析
    简述HTTP过程
    c# 版贪食蛇
    今日头条列表json
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/7792802.html
Copyright © 2011-2022 走看看