CodeForces 478B 第六周比赛B题

B - B

Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

n participants of the competition were split into m teams in some manner so that each team has at least one participant. After the competition each pair of participants from the same team became friends.

Your task is to write a program that will find the minimum and the maximum number of pairs of friends that could have formed by the end of the competition.

Input

The only line of input contains two integers n and m, separated by a single space (1 ≤ m ≤ n ≤ 109) — the number of participants and the number of teams respectively.

Output

The only line of the output should contain two integers kmin and kmax — the minimum possible number of pairs of friends and the maximum possible number of pairs of friends respectively.

Sample Input

Input

5 1

Output

10 10

Input

3 2

Output

1 1

Input

6 3

Output

3 6

Hint

In the first sample all the participants get into one team, so there will be exactly ten pairs of friends.

In the second sample at any possible arrangement one team will always have two participants and the other team will always have one participant. Thus, the number of pairs of friends will always be equal to one.

In the third sample minimum number of newly formed friendships can be achieved if participants were split on teams consisting of 2people, maximum number can be achieved if participants were split on teams of 1, 1 and 4 people.

题解:

n个人,把他们分配到m支队伍中去,每支队伍至少要有一个人,在一个队伍中的任意两个人都可以成为一对朋友,要你分配队伍,求出最少能够形成的朋友对数min,和最多能形成的队伍对数max.

思路:

当m=1的时候,也就是只有一支队伍,那么kmin=kmax=C(n,2);其余的情况求最大值的 时候我我们先把每个队伍分配一个人,然后把剩余的人全部分配到一个队伍,这样求得的为最大值,max=C(n-m+1,2),求最小值的时候,我们先把每个队伍都平均分配人数,剩余的人在任意选几个放一个人。

#include<iostream>
using namespace std;
int main()
{
    long long minnum,maxnum,n,u,m,t,s,p;
    cin>>n>>m;
    if(m==1)
    {
        minnum= maxnum=n*(n-1)/2;
        cout<<minnum<<" "<<maxnum<<endl;
    }
    else
    {
        t=n/m;
        p=n-t*m;
        minnum=(m-p)*t*(t-1)/2+p*t*(t+1)/2;
        u=n-m+1;
        maxnum=u*(u-1)/2;
        cout<<minnum<<" "<<maxnum<<endl;
    }
}
时间: 2024-12-25 01:31:32

CodeForces 478B 第六周比赛B题的相关文章

CodeForces 569A 第六周比赛C踢

C - C Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 569A Description Little Lesha loves listening to music via his smartphone. But the smartphone doesn't have much memory, so Lesha lis

CodeForces 478B 第八次比赛 B题

Description n participants of the competition were split into m teams in some manner so that each team has at least one participant. After the competition each pair of participants from the same team became friends. Your task is to write a program th

LightOJ 1317 第六周比赛A题

A - A Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Description You probably have played the game "Throwing Balls into the Basket". It is a simple game. You have to throw a ball into a basket from a certain dista

暑假集训第一周比赛C题http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/C

C - 学 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如

第十六周oj刷题——Problem C: B 求类中数据成员的最大值-类模板

Description 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. Input 分别输入3个整数,3个浮点数,3个字符 Output 3个整数的最大值 3个浮点数中的最大值 3个字符中的最大值 Sample Input 9 5 6 1.1 3.4 0.9 a b c Sample Output 9 3.40 c /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 25 日

第十六周oj刷题——Problem D: B 友元类-计算两点间距离

Description 类Distance定义为类Point的友元类来实现计算两点之间距离的功能. Point类中有两个私有数据成员X和Y来表示点的两个坐标(横坐标和纵坐标), 成员函数需要自己定义. 主程序输入两个Point点的坐标,计算两个点之间的距离. Input 两个点的坐标(横坐标和纵坐标) Output 两个点的距离(保留了两位小数) Sample Input 1.0 1.0 2.0 2.0 Sample Output 1.41 /* All rights reserved. * 文

第十六周oj刷题——Problem I: 改错题:类中私有成员的访问

Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间.要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年.月.日和时.分.秒. Input 年      月       日 时      分       秒 Output 年/月/日 时:分:秒 Sample Input 2013 12 23 14 23 50 Sample Ou

第十六周oj刷题——Problem K: 填空题:类模板---求数组的最大值

Description 类模板---求数组的最大值 找出一个数组中的元素的最大值,数组大小为10.(用类模板来实现) 数组元素类型作为类模板的参数. Input 10个int型数据 10个double型数据 10个char型数据 10gestring型数据 Output 10个int型数据的最大值 10个double型数据的最大值 10个char型数据的最大值 10个string型数据的最大值 Sample Input 1 3 5 7 9 8 6 4 2 0 1.2 3.4 5.66 7.8 9

第十六周oj刷题——Problem E: B 构造函数和析构函数

Description 在建立类对象时系统自动该类的构造函数完成对象的初始化工作, 当类对象生命周期结束时,系统在释放对象空间之前自动调用析构函数. 此题要求: 根据主程序(main函数)和程序执行结果,结合构造函数和析构函数相关知识,在下面的程序段基础上完成整个设计. 提示:(1)需要自定义复数类Complex,并在类中添加适当的构造函数和析构函数. (2)只提交begin到end部分的代码 Input 一个复数的实部和虚部 Output 调用相关构造函数和析构函数的运行结果(需要自己分析),