Lightoj1014【基础题】

题意:

有C个人,安排了P个吃的,每个人会吃Q个吃的,最后留下L个吃的;求所有可能的Q,从小到大输出,要保证Q>L;

思路:

其实就是求出P-L的所有数的约数,然后这个约数>L的话就满足;

#include<cstdio>
#include<math.h>
#include<queue>
#include<map>
#include<string>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const LL mod=1e9+7;
const int N=1e5+10;
int a[N];
int num;
int L;

void solve(int n)
{
    num=0;
    int x,y;
    int q=sqrt(n);
    for(int i=1;i<=q;i++)
    {
        if(n%i==0)
        {
            x=i;
            y=n/i;
            if(x>L)
                a[num++]=x;
            if(x!=y)
            {
                if(y>L)
                    a[num++]=y;
            }
        }
    }
}

int main()
{
    int P;
    int T,cas=1;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&P,&L);
        printf("Case %d: ",cas++);
        int temp=P-L;
        solve(temp);
        int flag=0;
        //printf("%d\n",num);
        sort(a,a+num);
        for(int i=0;i<num;i++)
        {
            if(flag)
                printf(" ");
            printf("%d",a[i]);
            flag=1;
        }
        if(!num)
            puts("impossible");
        else
            puts("");
    }
    return 0;
}



posted @ 2016-10-17 22:28  see_you_later  阅读(92)  评论(0编辑  收藏  举报