学校新建了宿舍楼,共有
n
n
n 间寝室。等待分配的学生中,有女生
n
0
n_0
n0 位、男生
n
1
n_1
n1位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。
现请你写程序完成寝室的自动分配。分配规则如下:
- 男女生不能混住;
- 不允许单人住一间寝室;
- 对每种性别的学生,每间寝室入住的人数都必须相同;例如不能出现一部分寝室住 2 位女生,一部分寝室住 3 位女生的情况。但女生寝室都是 2 人一间,男生寝室都是 3 人一间,则是允许的;
- 在有多种分配方案满足前面三项要求的情况下,要求两种性别每间寝室入住的人数差最小。
输入格式:
输入在一行中给出 3 个正整数 n 0 n_0 n0、 n 1 n_1 n1、 n n n,分别对应女生人数、男生人数、寝室数。数字间以空格分隔,均不超过 1 0 5 10_5 105 。
输出格式:
在一行中顺序输出女生和男生被分配的寝室数量,其间以 1 个空格分隔。行首尾不得有多余空格。
如果有解,题目保证解是唯一的。如果无解,则在一行中输出 No Solution
。文章来源:https://www.toymoban.com/news/detail-422401.html
输入样例 1:
24 60 10
输出样例 1:
4 6
注意 :输出的方案对应女生都是 24/4=6 人间、男生都是 60/6=10 人间,人数差为 4。满足前三项要求的分配方案还有两种,即女生 6 间(都是 4 人间)、男生 4 间(都是 15 人间);或女生 8 间(都是 3 人间)、男生 2 间(都是 30 人间)。但因为人数差都大于 4 而不被采用。文章来源地址https://www.toymoban.com/news/detail-422401.html
输入样例 2:
29 30 10
输出样例 2:
No Solution
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,n;cin>>a>>b>>n;
int a1=-1,b1=-1,mn=1000000;
for(int i=1;i<=n-1;i++)
{
int j=n-i;
if(a!=i && a%i==0 && b%j==0 &&b!=j)
{
int aa=a/i,bb=b/j,res=abs(aa-bb);
if(mn>res) a1=i,b1=j,mn=res;
}
}
if(a1==-1 && b1==-1) cout<<"No Solution";
else cout<<a1<<" "<<b1;
return 0;
}
到了这里,关于PTA L1-095 分寝室 (20 分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!