WindMLATGLS 2022-11-08 18:42 采纳率: 20%
浏览 35
已结题

csp20211202 序列查询新解 70-90分问题

csp20210302 序列查询新解
cnt函数返回long就会由返回int从90变为70 按理说int可以通过的样例换成long也应该能通过,求看看为什么少了20分。
还有为什么下面代码只能拿90分?
下面是java代码

package csp2021;

import java.util.Scanner;

public class csp1202_V3 {

    static int cnt(int x,int r){
        if(x<r)
            return 0;
        return (0+x/r-1)*(x/r)/2*r+(x-x/r*r+1)*(x/r);
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int N=scanner.nextInt();
        int r=N/(n+1);
        int[] A=new int[(int)(10e5+10)];
        long count=0;
        A[n+1]=N;
        for(int i=1;i<n+1;i++){
            A[i]=scanner.nextInt();
        }
        for(int i=0;i<=n;i++){
            if(A[i]<i*r){
                count+=i*(Math.min(i*r,A[i+1])-A[i])-cnt((Math.min(i*r,A[i+1])-1),r)+cnt(A[i]-1,r);
            }
            if(A[i+1]>i*r){
                count+=cnt(A[i+1]-1,r)-cnt(Math.max(i*r,A[i])-1,r)-i*(A[i+1]-Math.max(A[i],i*r));
            }
        }
        System.out.println(count);
    }
}


  • 写回答

2条回答 默认 最新

  • WindMLATGLS 2022-11-08 18:52
    关注

    https://www.bilibili.com/video/BV1Ea411m7oW/?spm_id_from=333.337.search-card.all.click&vd_source=2f8fc4b8dfa65527dbec9a7ed818c095
    写法是照着这位up写的。代码抽象,可以看下视频。主要是求dalao解决不能满分和90变70的问题。////////////////////////////////////////////////////////////////////////////////////////

    更新:90分变70分的问题已经聚焦到最后for里的count+=和count=count+上面了,前者可以得到90分,后者只能得到70。有dalao可以看看原因吗

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月15日
  • 修改了问题 11月9日
  • 创建了问题 11月8日

悬赏问题

  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥50 HAL ADCDMA单次触发转换
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步