B - ARC Wrecker

这篇博客讨论了一道编程题目,涉及数组处理和动态规划算法。通过对给定数组进行排序,确定每个元素可能的变动范围,计算出所有可能的数组状态。博主提供了AC代码实现,该代码通过遍历排序后的数组并计算方案数来得出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门
题意:对于题目给定的一个数组,取出一个数把比该数大的数都进行减一,求最后数组所有可能出现的额情况
思路:对数组进行排序,
a[n-1]!=a[n],那么a[n]可以不变,也可以最多减到a[n-1],因此方案数为(a[n]-a[n-1]+1).
当a[n]减到a[n-1]时,之后的操作和a[n-1]同步了,可以看作合并了,直接不管.
AC代码:

package 练习;
import java.io.*;
import java.lang.*;
import java.math.BigInteger;
import java.util.*;
public class Main{
	static Scanner scanner=new Scanner(System.in);
	static int mod=(int) (1e9+7);
	public static void main(String[] args) {
		int n=scanner.nextInt();
		int a[]=new int [n+1];
		for(int i=1;i<=n;i++){
	        a[i]=scanner.nextInt();
	        if(a[i]==a[i-1]){
	            i--;n--;
	        }
	    }
	    Arrays.sort(a,1,n+1);
	    long last=1;
	    a[0]=0;
	    for(int i=n;i>=1;i--){
	        last=(last*(a[i]-a[i-1]+1))%mod;
	    }
	    System.out.println(last);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值