题意:
有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 ",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; }