zoukankan      html  css  js  c++  java
  • Candy Distribution

    Kids like candies, so much that they start beating each other if the candies are not fairly distributed. So on your next party, you better start thinking before you buy the candies.

    If there are KK kids, we of course need KXK⋅X candies for a fair distribution, where XX is a positive natural number. But we learned that always at least one kid looses one candy, so better be prepared with exactly one spare candy, resulting in (KX)+1(K⋅X)+1 candies.

    Usually, the candies are packed into bags with a fixed number of candies CC. We will buy some of these bags so that the above constraints are fulfilled.

    Input

    The first line gives the number of test cases tt (0<t<1000<t<100). Each test case is specified by two integers KK and CC on a single line, where KK is the number of kids and CC the number of candies in one bag (1K,C1091≤K,C≤109). As you money is limited, you will never buy more than 109109 candy bags.

    Output

    For each test case, print one line. If there is no such number of candy bugs to fulfill the above constraints, print “IMPOSSIBLE” instead. Otherwise print the number of candy bags, you want to buy. If there is more than one solution, any will do.

    Sample Input 1Sample Output 1
    5
    10 5
    10 7
    1337 23
    123454321 42
    999999937 142857133
    
    IMPOSSIBLE
    3
    872
    14696943
    166666655

    题解:就是求一个不定方程 k*x-c*y=1  有几个注意的地方 对c==1的情况进行特判  不能有puts输出 还有就是不能有(x%d+d)%d来更新x

    #include<iostream>
    #include<cstring>
    #include<cstdio> 
    using namespace std;
    typedef long long ll;
    ll exgcd(ll a,ll b,ll &x,ll &y){
        if(b==0){
            x=1;
            y=0;
            return a;
        }
        ll r=exgcd(b,a%b,x,y);
        ll t=y;
        y=x-(a/b)*y;
        x=t;
        return r;
    }
    int main(){
        ios::sync_with_stdio(false);
        ll t;
        cin>>t;
        while(t--){
            ll k,c;
            cin>>k>>c;
            ll x,y;
            ll r=exgcd(c,k,x,y);
            if(r!=1){
    //            puts("IMPOSSIBLE");
                cout<<"IMPOSSIBLE"<<'
    ';
            }
            else {
                if(c==1) {
                    cout<<k+1<<'
    ';
                }
                else{
                    while(x<=0) x+=k;
                    cout<<x<<'
    ';
                }
            }
        }
        return 0; 
    }   

     

  • 相关阅读:
    VS2010如何以管理员权限启动? 转载
    ArcGIS属性编辑字符型字段值出现乱码问题
    点批量移动到线上(ArcGis版) 转载
    C#判断数据库中取出的字段值是否为空(NULL) .
    方框内打勾(钩)的符号(word和excel)
    C# 获取屏幕的大小
    神通数据库的备份和还原
    推荐系列文章:《DotText源码阅读》
    Lucene.Net 2.3.1开发介绍 —— 阅读索引(转载)
    Lucene.Net:使用eaglet的盘古分词进行分词和搜索(转载)
  • 原文地址:https://www.cnblogs.com/Accepting/p/11355352.html
Copyright © 2011-2022 走看看