头像


访客:1018

离线:4小时前


问题 实数二分


6天前

二分实数查找什么时候取l,什么时候取r,现在感觉有点糊





29天前

题目链接 蓝桥杯 完全二叉树的权值

我遇到了InputMismatchException问题。

错误的代码:


public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int N=input.nextInt();
        int arr[]=new int [N+1];
        for(int i=0;i<N;i++){
            arr[i]=input.nextInt();
        }

        long max=-99999;

        int depth = 0;
        int l=0;
        int r=0;

        int d=0;
        while(r<N){
            int sum=0;
            r+=Math.pow(2,d++);
            while(l<r&&l<N){
             //遍历当前层的值
                sum+=arr[l];
                l++;
            }
            if(sum>max){
                max=sum;
                depth=d;
            }

        }

        System.out.println(depth);
}
}

编译器报了什么错误?Exception in thread “main” java.util.InputMismatchException
而我这样写又是对的,只是把输入的时候从0~N-1变成
1~N,就对了

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);
        int N=input.nextInt();
        int arr[]=new int [N+1];
        for(int i=1;i<=N;i++){
            arr[i]=input.nextInt();
        }


        long max=-999999;

        int depth = 0;
        int l=0;
        int r=0;
        int d=0;
        while(r<=N){
            long sum=0;
            r+=Math.pow(2,d++);
            while(l<=r&&l<=N){

                sum+=arr[l];
                l++;
            }
            if(sum>max){
                max=sum;
                depth=d;

            }
        }

        System.out.println(depth);
}
}



活动打卡代码 AcWing 1222. 密码脱落


1个月前
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N = 1010;
int f[N][N];
int main() {
    string str1;
    cin >> str1;
    int length = str1.length();
    for (int len = 1; len <= length; len++) {//枚举长度
        for (int l = 0; len + l - 1 < length; l++) {
            int right = len + l - 1;
            if ((right == l)&&(len==1))f[l][right] = 1;
            else {
                if (str1[l] == str1[right])f[l][right] = f[l + 1][right - 1]+2;
                f[l][right] = max(f[l][right], f[l][right - 1]);
                f[l][right] = max(f[l][right], f[l+1][right]);
            }
        }
    }
    cout << length - f[0][length - 1] << endl;

    return 0;
}


活动打卡代码 AcWing 1047. 糖果


1个月前
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 110;
int g[N];
int f[N][N];
int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> g[i];
    }
    memset(f, -0x3f, sizeof(f));//由于0,1,0,2....无意义
    f[0][0] = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < m; j++) {
            f[i][j] = max(f[i - 1][j], f[i - 1][(j + m - g[i]) % m] + g[i]);
        }
    }

    cout << f[n][0] << endl;
    return 0;
}


活动打卡代码 AcWing 1050. 鸣人的影分身


1个月前
#include<iostream>
using namespace std;
const int N = 11;
int main() {
    int T;
    cin >> T;
    while (T--) {
        int n, m;
        cin >> m >> n;
        int f[N][N] = { 0 };
        f[0][0] = 1;
        for (int i = 0; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                f[i][j] = f[i][j - 1];
                if (i >= j)f[i][j] += f[i - j][j];
            }
        }
        cout << f[m][n] << endl;
    }
}


活动打卡代码 AcWing 1228. 油漆面积


1个月前

简易做法,扫描标记,满分不了可以在时间紧迫的情况下用

C++


#include<iostream>
#include<cstdio>
using namespace std;
const int N = 10010;
bool g[N][N];
int main() {
    int n;
    cin >> n;
    long long res = 0;
    while (n--) {
        int x1, y1, x2, y2;
        //cin >> x1 >> y1 >> x2 >> y2;
        scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
        for (int i = x1; i < x2; i++) {
            for (int j = y1; j < y2; j++) {
                if (g[i][j] == 0) {
                    res += 1ll;
                    g[i][j] = 1;
                }
                //g[i][j] = 1;
            }
        }
    }
    cout << res << endl;
    return 0;
}



活动打卡代码 AcWing 1223. 最大比例


2个月前
import java.util.Arrays;
import java.util.Scanner;

public class 最大比例 {
    /*
    从第二项开始,找到每项与第一项的最大公约数,然后第i项除最大公约数l 就是所求公比的分母
    第1项除以l就是就是分子
    不要想着第i项除以第一项,公比不一定是整数,有误差,按照上面的办法求转换为小数,就不会有了
    上面的其实就是下面的变形仔细想一下,下面的不也是分母除以分子

     */
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int n=input.nextInt();
        long arr[]=new long[n+1];
        for(int i=0;i<n;i++){
            arr[i]=input.nextLong();
        }
        Arrays.sort(arr,0,n);
        int index=0;
        long zi[]=new long[n];
        long mu[]=new long[n];

        for(int i=1;i<n;i++)
        {
            if(arr[i]!=arr[i-1])//去重
            {
                long d=gcdchu(arr[i],arr[0]);
                zi[index]=arr[0]/d;
                mu[index]=arr[i]/d;
                index++;
            }
        }
        long ansmu=mu[0];
        long anszi=zi[0];
        for(int i=1;i<index;i++){
            ansmu=gcd_sub(ansmu,mu[i]);
            anszi=gcd_sub(anszi,zi[i]);
        }
        System.out.println(ansmu+"/"+anszi);
    }
    static long gcdchu(long a,long b){
        if(b==0)return a;
        else return gcdchu(b,a%b);
    }
    static long gcd_sub(long a,long b){
        if(a<b){
            a=a^b;
            b=a^b;
            a=a^b;
        }
        if(b==1)
            return a;
        return gcd_sub(b,a/b);
    }
}


活动打卡代码 AcWing 1225. 正则问题


2个月前
import java.util.Scanner;

public class 正则问题 {
    static String res;
    static int index=0;
    //static int ans=0;
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        res=input.next();
        //dfs(0);
        System.out.println(dfs(0));

    }
    static int dfs(int ans){
        while (index<res.length()){
            //左括号开始
            if(res.charAt(index)=='('){
                index++;
                ans+=dfs(0);
                index++;

            }
            //右括号结束
            else if(res.charAt(index)==')'){
                break;
                //这里index不用加1,一个完整括号()完成就自动结束

            }
            else if(res.charAt(index)=='|'){
                index++;
                int temp=dfs(0);
                ans=Math.max(ans,temp);
            }
            else {
                ans++;
                index++;
            }
        }
        return ans;
    }
}



活动打卡代码 AcWing 1246. 等差数列


2个月前

import java.util.Arrays;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int N=input.nextInt();
        int arr[]=new int[N+1];
        for(int i=0;i<N;i++){
            arr[i]=input.nextInt();
        }
        Arrays.sort(arr);
        int Max=arr[N];
        int Min=arr[1];
        int d=0;
        int cha[]=new int[N];
        int index=0;
        //找每个数与第一位的公差
        for(int i=2;i<=N;i++){
        cha[index++]=arr[i]-Min;
        }
        //找最大公差
        for(int i=0;i<index;i++){
      //     int temp= gcd(cha[i-1],cha[i]);
           d=gcd(cha[i],d);
        }
        if(d==0)
        System.out.println(N);
        else
        System.out.println((Max-Min)/d+1);


    }
    public  static int gcd(int a,int b){
        if(b==0)
            return a;
        else {
            return gcd(b,a%b);
        }
    }
}



活动打卡代码 AcWing 2067. 走方格


2个月前

import java.util.Scanner;

public class 走方格 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int n=input.nextInt();
        int m=input.nextInt();
        int arr[][]=new int[n+1][m+1];
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(i==1&&j==2)
                    arr[i][j]=1;
               else if(i==2&&j==1)
                    arr[i][j]=1;
              else   if(i%2==0&&j%2==0){
                    arr[i][j]=0;
                }

                else {
                    arr[i][j]=arr[i-1][j]+arr[i][j-1];
                }
            }

        }
        System.out.println(arr[n][m]);
    }
}