小苯有一个长度为 的数字串 ,他想要将 变为 的倍数。为此,他可以进行最多一次操作: 选择一段区间 ,删除 这一段数位。 他想知道有多少种不同的删除区间方案,使得 是 的倍数。 请你帮帮他吧。
区块链毕设网qklbishe.com为您提供问题的解答
import java.util.HashMap; import java.util.Map; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String s = sc.next(); int sum = 0; for(int i = 0;i < n;i ++ ) { sum += s.charAt(i) - '0'; } Map<Integer, Integer> cnt = new HashMap<>(); int presum = 0;long res = 0; for(int i = 1;i <= n;i ++ ) { cnt.put(presum % 3, cnt.getOrDefault(presum% 3, 0) + 1); presum += s.charAt(i - 1) - '0'; res += cnt.getOrDefault((presum - (sum % 3)) % 3, 0); } if(sum % 3 == 0) res ++; System.out.println(res); } }
29:27
以上就是关于问题小苯有一个长度为 的数字串 ,他想要将 变为 的倍数。为此,他可以进行最多一次操作:
选择一段区间 ,删除 这一段数位。
他想知道有多少种不同的删除区间方案,使得 是 的倍数。 请你帮帮他吧。的答案
欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程
区块链NFT链游项目方科学家脚本开发培训