链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
Bingbong给定了一个长度为n的数组a,初始时a1=1,a2=2,......,an=n,现在他需要从0到m中选出一个数来作为an+1。然后通过以下的规则来更新数组a。 规则:ai=(ai+1)% i (i∈n→1) 。 对于更新后的数组a,Bingbong想使得a数组中不同的元素恰好为k个。由于从[0,m]的挑选方案种数太多,他实在数不过来,所以他想请作为数学高手的你来帮他解决这个问题。
输入描述:
第一行一个整数case(case<=10000),表示数据组数。
接下来case行,每行三个非负整数。分别为n,m,k(1<=n<=1e9,0=<m<=1e9,1<=k<=n+1),含义如题面所示。
输出描述:
共case行。每行一个非负整数代表最终的方案总数。
示例1
输入
复制4 4 6 3 2 0 1 265 265 265 3 10 2
4 4 6 3 2 0 1 265 265 265 3 10 2
输出
复制2 1 0 5
2 1 0 5
说明
对于第一组样例:
我们可以选择an+1=6,然后如下操作
-
a4=a5mod4=6mod4=2
-
a3=a4mod3=2mod3=2
-
a2=a3mod2=2mod2=0
-
a1=a2mod1=0mod1=0
-
a=[0,0,2,2,6]
-
这样a数组刚好有3个不同的数字。
-
对于第三组样例,没有一个数字可以选择使得数组a刚好为265个不同的数字。
-
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int T = sc.nextInt(); while (T-->0){ int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); int count=0; if(k==1){ System.out.println(1); } else if (k==2&&m<=n) { System.out.println(m); } else if (k==2&&m>n) { System.out.println(n+m/n-1); } else if (k==3&&m>n) { System.out.println(m-n-m/n+1); } else if (k==3&&m<=n) { System.out.println(0); } else if (k>3||k<1) { System.out.println(0); } } } }