列表

详情


NC15475. 组合数问题

描述

众所周知,小葱同学擅长计算,尤其擅长计算组合数,所以小葱给了你两个数x和k,希望你把x分成恰好k个不同的组合数的和。所谓不同,即对于两个组合数C(n1,m1)和C(n2,m2),如果n1≠n2或者m1≠m2,我们就称这两个组合数是不同的。为了使得计算不过于复杂,你需要保证你给出的任何一个组合数C(n,m)满足0≤m≤n≤x。数据保证一定有解。

输入描述

第一行两个整数 x,k。

输出描述

k行,每行两个整数 n,m 代表一个组合数 C(n,m)。如果有多种可能的答案,任意输出一组即可。

示例1

输入:

6 2

输出:

3 1
3 2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 408K, 提交时间: 2020-07-18 09:00:16

#include<bits/stdc++.h>
using namespace std;
 
int main(){
    int x,k;
    cin>>x>>k;
    cout<<x-k+1<<" "<<1<<endl;
    for(int i=2;i<=k;i++) cout<<i<<" "<<0<<endl;
}

C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 404K, 提交时间: 2022-11-16 13:13:53

#include<iostream>
using namespace std;
int x,k;
int main(){
	cin>>x>>k;
	while(k>1){
		k--;
		x--;

		printf("%d 0\n",x);
	}
	printf("%d 1\n",x);
}

Python3 解法, 执行用时: 42ms, 内存消耗: 4580K, 提交时间: 2022-06-02 19:42:16

a,b=map(int,input().split())
for x in range(1,b):
    print(x,0)
print(a+1-b,1)

上一题