- 网络赛:2017 ACM/ICPC Asia Regional Shenyang Online
- 题目来源:cable cable cable
- Problem Description: Connecting the display screen and signal sources which produce different color signals by cables, then the display screen can show the color of the signal source.Notice that every signal source can only send signals to one display screen each time. Now you have M display screens and K different signal sources(K≤M≤2^32−1). Select K display screens from M display screens, how many cables are needed at least so that any K display screens you select can show exactly K different colors.
- Input Multiple cases (no more than 100), for each test case: there is one line contains two integers M and K.
- Output Output the minimum number of cables N.
- Sample Input 3 2 20 15
- Sample Output 4 90
- Hint
As the picture is shown, when you select M1 and M2, M1 show the color of K1, and M2 show the color of K2. When you select M3 and M2, M2 show the color of K1 and M3 show the color of K2. When you select M1 and M3, M1 show the color of K1.
- 题目分析:对于每个测试样例给两个整数,分别是M个display screens,K个different signal sources,(K≤M≤2^32−1),从M个screens中选出K个screens,在源头和屏幕之间连线,使得这K个屏幕可以显示出不同的K中颜色。 连线只存在源头和屏幕之间。
- 我的思路: 首先,对于K个源点,先对K个屏幕连一条线,以K=3,M=4为例子:
每个源点选择一个屏幕进行连线,如下图:
这样会剩下(M-K)个屏幕在链接的时候一定会链接不同的源点,并且链接的源点一定是K个,因为在显示的时候是要求选择K个屏幕同时出现不同的颜色,如果链接的源点少于K个就会出现重复颜色。如下图:
最后,可以得到一个公式: 需要的连线数目=K (M-K)* K , 整理得K*(M 1)-K*K 需要注意一下M,K的范围,需要用long long存,要不就是WA…..Orz
- 完整代码:
#include<stdio.h>
int main(void)
{
long long M, K;
while (scanf("%lld%lld", &M, &K) != EOF)
{
printf("%lldn", K*(M 1) - K*K);
}
return 0;
}