蓝桥杯题库 历届试题部分(C++、Java)代码实现(31-45)

2023-10-27


将定期更新蓝桥杯习题集的解题报告~

五、历届试题

PREV-31 小朋友排队

简记:树状数组维护
设:
f(i)=a[i]左边严格大于a[i]的元素个数。
g(i)=a[i]右边严格小于a[i]的元素个数。
则:
a[i]的不高兴度为:1+2+…+f(i) + 1+2+…+g(i);

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100052;
typedef long long int qq;
int n;
struct Data {
    int val, id;
} a[maxn];
int p[maxn], c[maxn];
qq f(qq x) { return (x + 1) * x / 2; }
bool operator<(Data x, Data y) { return x.val < y.val; }
bool cmp_id(Data x, Data y) { return x.id < y.id; }
struct Bit_tree {
    int a[maxn], size;
    int lowbit(int x) { return x & (-x); }
    void init(int x) {
        size = x;
        for (int i = 0; i <= size; i++) {
            a[i] = 0;
        }
    }
    void push(int pos, int val) {
        while (pos <= size) {
            a[pos] += val;
            pos += lowbit(pos);
        }
    }
    int ask(int pos) {
        int ret = 0;
        while (pos > 0) {
            ret += a[pos];
            pos -= lowbit(pos);
        }
        return ret;
    }
    int ask(int l, int r) {
        if (l > r) return 0;
        return ask(r) - ask(l - 1);
    }
};
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i].val);
        a[i].id = i;
    }
    ///离散化
    sort(a + 1, a + 1 + n);
    int now = 0;
    for (int i = 1; i <= n; i++) {
        if (i == 1 || a[i].val > a[i - 1].val) now++;
        c[i] = now;
    }
    for (int i = 1; i <= n; i++) {
        a[i].val = c[i];
    }
    ///树状数组统计 p
    sort(a + 1, a + 1 + n, cmp_id);
    memset(p, 0, sizeof(p));
    Bit_tree tr;
    tr.init(now);
    for (int i = 1; i <= n; i++) {  // a[i]左边比a[i]大的元素
        p[i] += tr.ask(a[i].val + 1, now);
        tr.push(a[i].val, 1);
    }
    tr.init(now);
    for (int i = n; i > 0; i--) {  // a[i]右边比a[i]小的元素
        p[i] += tr.ask(1, a[i].val - 1);
        tr.push(a[i].val, 1);
    }
    qq ans = 0;
    for (int i = 1; i <= n; i++) {
        ans += f(p[i]);
    }
    printf("%lld\n", ans);
    return 0;
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
	static int N = 100010;
	static int MAX = 1000100;

	static int[] C = new int[MAX];
	static int[] S = new int[MAX];
	static int[] b = new int[N];
	static long[] total = new long[N];
	static long ans;
	static int[] num = new int[N];
	static int T, s, t, i, j;

	static int Lowbit(int x) {
		return x & (-x);
	}

	static void add(int pos, int num, int[] P) {
		while (pos <= MAX) {
			P[pos] += num;
			pos += Lowbit(pos);
		}
	}

	static int Sum(int end, int[] P) {
		int cnt = 0;
		while (end > 0) {
			cnt += P[end];
			end -= Lowbit(end);
		}
		return cnt;
	}

	static void init() {
		total[0] = 0;
		for (int i = 1; i < N; ++i) {
			total[i] = total[i - 1] + i;
		}
	}

	public static void main(String[] args) throws IOException {
		init();
		BufferedReader buf = new BufferedReader(
				new InputStreamReader(System.in));
		T = Integer.parseInt(buf.readLine());
		String[] str = buf.readLine().split(" ");
		for (int j = 0; j < T; j++) {
			num[j] = Integer.parseInt(str[j]);
			add(num[j] + 1, 1, C);
			b[j] = j - Sum(num[j], C);
										
			b[j] -= Sum(num[j] + 1, C) - Sum(num[j], C) - 1;

		}

		ans = 0;
		for (int j = T - 1; j > -1; --j) {
			add(num[j] + 1, 1, S);
			b[j] += Sum(num[j], S);

			ans += total[b[j]];
		}

		System.out.println(ans);

	}

}

PREV-32 分糖果

#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;

int a[1100] = {0};
int n;
int num = 0;

bool is_same() {
    for (int i = 0; i < n; i++) {
        if (a[0] != a[i]) return 0;
    }
    return 1;
}

void change() {
    int b[1100] = {0};
    for (int i = 0; i < n; i++) {
        a[i] = a[i] / 2;
        b[i + 1] = a[i];
    }
    a[0] = a[0] + b[n];
    for (int i = 1; i < n; i++) {
        a[i] = a[i] + b[i];
    }
}

void add() {
    for (int i = 0; i < n; i++) {
        if (a[i] % 2 == 1) {
            num++;
            a[i]++;
        }
    }
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    while (1) {
        if (is_same()) break;
        change();
        add();
    }
    cout << num;
    return 0;
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public  class Main
{
	static int m,n;
	public static void main(String[] args) throws IOException
	{
		int candy=0;
		BufferedReader buf;		
		String str1,str2;
		buf=new BufferedReader(new InputStreamReader(System.in));
		str1=buf.readLine();
		m=Integer.parseInt(str1);
		int b[]=new int[m];
		str2=buf.readLine();
		String a[]=str2.split(" ");
		for(int i=0;i<m;i++)
		{
			b[i]=Integer.parseInt(a[i]);
		}
		if(!equal(b))
		{
			while(true)
			{
				n=b[m-1];
				for(int i=m-1;i>0;i--)
				{
					b[i]=b[i-1]/2+b[i]/2;
				}
				b[0]=b[0]/2+n/2;
				if(equal(b))
					break;
				else
				{
					for(int i=0;i<m;i++)
					{
						if(b[i]%2!=0)
						{
							candy++;
							b[i]++;
						}
					}
				}
			}
		}
		System.out.println(candy);
		
	}
	public static boolean equal(int a[])
	{
		int num=0;
		for(int i=0;i<m-1;i++)
		{
			if(a[i]==a[i+1])
				num++;
		}
		if(num==m-1)
		{
			return true;
		}
		else 
			return false;
		
	}
}

PREV-33 兰顿蚂蚁

//简单模拟
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
int l[5] = {0, 4, 1, 2, 3};  //左转数组
int r[5] = {0, 2, 3, 4, 1};  //右转数组
int movex[5] = {0, 0, 1, 0, -1};
int movey[5] = {0, -1, 0, 1, 0};
bool color[150][150] = {0};
int x, y;  //起始坐标(x,y)
int f;

void move()  //在点(x,y)朝向f
{
    if (color[y][x] == 1)  //如果是黑砖,右转90度,将该格改为白格,并向前移一格;
    {
        f = r[f];
        color[y][x] = 0;
        x = x + movex[f];
        y = y + movey[f];

    } else  //若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
    {
        f = l[f];
        color[y][x] = 1;
        x = x + movex[f];
        y = y + movey[f];
    }
}

int main() {
    int m, n;
    cin >> m >> n;  // m行n列
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &color[i][j]);
        }
    }
    int k;
    char s;  //上下左右分别用:U1,D3,L4,R2
    cin >> y >> x;
    scanf(" %c", &s);
    if (s == 'U') f = 1;
    if (s == 'R') f = 2;
    if (s == 'D') f = 3;
    if (s == 'L') f = 4;
    cin >> k;
    /*if(k==0)
    {
            cout<<y<<" "<<x;
            return 0;
    }
    x=x+movex[f];
    y=y+movey[f];*/
    for (int i = 0; i < k; i++) {
        move();
    }
    cout << y << " " << x;
    return 0;
}

import java.io.*;

public class Main {
	static int n, m;
	static int s, e;
	static char[] chs = { 'L', 'U', 'R', 'D', 'L' };
	static int count = 0;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s1[] = br.readLine().split(" ");
		n = Integer.parseInt(s1[0]);
		m = Integer.parseInt(s1[1]);

		int[][] arr = new int[n][m];
		for (int a = 0; a < n; a++) {
			String str[] = br.readLine().split(" ");
			for (int b = 0; b < m; b++) {
				arr[a][b] = Integer.parseInt(str[b]);
			}
		}

		int x, y;
		String s2[] = br.readLine().split(" ");
		x = Integer.parseInt(s2[0]);
		y = Integer.parseInt(s2[1]);

		char dec = s2[2].charAt(0);

		int z;
		z = Integer.parseInt(s2[3]);

		s = x;
		e = y;
		while (count < z) {
			if (arr[s][e] == 1) {
				for (int i = 0; i < chs.length; i++) {
					if (dec == chs[i]) {
						dec = chs[i + 1];
						break;
					}
				}
				arr[s][e] = 0;
				func(dec, s, e);

			}

			if (arr[s][e] == 0) {
				for (int j = 1; j < chs.length; j++) {
					if (dec == chs[j]) {
						dec = chs[j - 1];
						break;
					}
				}
				arr[s][e] = 1;
				func(dec, s, e);

			}
		}
		System.out.print(s + " " + e);
	}

	public static void func(char dec, int x, int y) {
		if (dec == 'L') {
			e -= 1;
			count++;
		}
		if (dec == 'U') {
			s -= 1;
			count++;
		}
		if (dec == 'R') {
			e += 1;
			count++;
		}
		if (dec == 'D') {
			s += 1;
			count++;
		}
	}
}

PREV-34 矩阵翻硬币

简记:
思路:m*n的方格,ans = sqrt(m)*sqrt(n); 向下取整floor。大数据,二分求根号。
注:模拟十进制只能90分,压万进制可以满分

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
const int bit = 10000;
struct Bnum {
    int a[maxn / 4], len;
    void input() {
        memset(a, 0, sizeof(a));
        char temp[maxn / 2];
        scanf("%s", temp);
        len = strlen(temp);
        for (int i = 0, j = len - 1; j >= 0; i++, j -= 4) {
            a[i] += (temp[j] - '0');
            if (j - 1 >= 0) a[i] += (temp[j - 1] - '0') * 10;
            if (j - 2 >= 0) a[i] += (temp[j - 2] - '0') * 100;
            if (j - 3 >= 0) a[i] += (temp[j - 3] - '0') * 1000;
        }
        len = (len - 1) / 4 + 1;
    }
    void print() {
        for (int i = len - 1; i >= 0; i--) {
            if (i == len - 1)
                printf("%d", a[i]);
            else
                printf("%04d", a[i]);
        }
        printf("\n");
    }
} e, o;
void init() {
    memset(e.a, 0, sizeof(e.a));
    e.len = 1;
    e.a[0] = 1;
    memset(o.a, 0, sizeof(o.a));
    o.len = 1;
}
bool operator<=(Bnum x, Bnum y) {
    if (x.len != y.len) return x.len < y.len;
    int pos = x.len - 1;
    while (pos >= 0) {
        if (x.a[pos] == y.a[pos]) {
            pos--;
            continue;
        }
        return x.a[pos] <= y.a[pos];
    }
    return 1;
}
Bnum operator+(Bnum x, Bnum y) {
    Bnum ret = o;
    ret.len = max(x.len, y.len);
    for (int i = 0; i < ret.len; i++) {
        ret.a[i] = x.a[i] + y.a[i];
    }
    for (int i = 0; i < ret.len; i++) {
        ret.a[i + 1] += ret.a[i] / bit;
        ret.a[i] %= bit;
    }
    if (ret.a[ret.len] != 0) ret.len++;
    return ret;
}
Bnum operator+(Bnum x, int y) {  //+1
    Bnum ret = x;
    ret.a[0] += y;
    int p = 0;
    for (int i = 0; i < ret.len; i++) {
        if (ret.a[i] / bit == 0) break;
        ret.a[i + 1] += ret.a[i] / bit;
        ret.a[i] %= bit;
    }
    if (ret.a[ret.len] != 0) ret.len++;
    return ret;
}
Bnum operator-(Bnum x, int y) {  //-1
    Bnum ret = x;
    ret.a[0] -= y;
    for (int i = 0; i < ret.len; i++) {
        if (ret.a[i] >= 0) break;
        ret.a[i + 1]--;
        ret.a[i] += bit;
    }
    if (ret.a[ret.len - 1] == 0) ret.len--;
    if (ret.len == 0) ret.len++;
    return ret;
}
Bnum operator*(Bnum x, Bnum y) {
    Bnum ret = o;
    for (int i = 0; i < x.len; i++) {
        for (int j = 0; j < y.len; j++) {
            ret.a[i + j] += x.a[i] * y.a[j];
        }
    }
    ret.len = x.len + y.len - 1;
    for (int i = 0; i < ret.len; i++) {
        ret.a[i + 1] += ret.a[i] / bit;
        ret.a[i] %= bit;
    }
    if (ret.a[ret.len] != 0) ret.len++;
    return ret;
}
Bnum operator/(Bnum x, int k) {  //除2下取整
    Bnum ret = x;
    for (int i = ret.len - 1; i >= 0; i--) {
        if (i != 0) ret.a[i - 1] += bit * (ret.a[i] & 1);
        ret.a[i] >>= 1;
    }
    if (ret.a[ret.len - 1] == 0) ret.len--;
    return ret;
}
Bnum sqrt(Bnum x) {
    Bnum l = e, r = x, mid;
    while (l <= r) {
        mid = (l + r) / 2;
        // printf("l=");   l.print();
        // printf("r=");   r.print();
        // printf("mid="); mid.print();
        if ((mid * mid) <= x)
            l = mid + 1;
        else
            r = mid - 1;
    }
    return l - 1;
}
void test() {
    Bnum x;
    long long int y;
    x.input();
    x.print();
    scanf("%lld", &y);
    printf("%lld\n", (long long int)sqrt(y));
    x = sqrt(x);
    x.print();
    x = x * x;
    x.print();
}
int main() {
    init();
    // while(1)test();
    Bnum x, y;
    x.input();
    y.input();
    Bnum ans = sqrt(x) * sqrt(y);
    ans.print();
    return 0;
}


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {


	public static void main(String[] args) throws Exception {
		/*n = Reader_09.nextInt();
		m = Reader_09.nextInt();*/
		
		//由于数目很大,所以不能用netxInt() 所以用String 最后转换成bigInteger
		String n = Reader_10.next();
		String m = Reader_10.next();
		
		System.out.println(sqrt(n).multiply(sqrt(m)));
		
	}

	private static BigInteger sqrt(String s) {
		
		//存一下数字的长度
		int length = s.length();
		//操作的位数
		int len = 0;
		//偶数
		if (length % 2 == 0) {
			len=length/2;
		}else {
			len=length/2+1;
		}
		char[] sArr = new char[len];
		//将字符数组默认位数上的数都填充为0
		Arrays.fill(sArr, '0');
		//转换成大整数
		BigInteger target = new BigInteger(s);
		for (int pos = 0; pos < len; pos++) {
			//从1~9开始尝试
			for (char c = '1'; c <= '9'; c++) {
				sArr[pos] = c;//在pos这个位置上尝试
				//转换成字符串,填入biginteger ,并用bigInteger的性质平方
				BigInteger pow = new BigInteger(String.valueOf(sArr)).pow(2);
				//大整数的比较方法
				if (pow.compareTo(target) == 1) {
					//如果用2超出了,就填1,如果8超出了,就填7
					sArr[pos] -= 1;
					break;
				}
			}
		}
		
		
		return new BigInteger(String.valueOf(sArr));
		
		
	}

}
class Reader_10 {
	static BufferedReader br = new BufferedReader(new InputStreamReader(
			System.in));
	static StringTokenizer tokenizer = new StringTokenizer("");

	static String next() throws Exception {
		while (!tokenizer.hasMoreTokens()) {
			tokenizer = new StringTokenizer(br.readLine());
		}
		return tokenizer.nextToken();
	}

	static int nextInt() throws Exception {
		return Integer.parseInt(next());
	}

}

PREV-35 正则问题

简记:
对于解决带括号的表达式求解问题,递归比较方便。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
char s[maxn];
int f(int &l, int r) {
    int ret = 0;
    while (l < r) {
        // printf("%d %c %d\n",l,s[l],ret);
        if (s[l] == 'x') {
            l++;
            ret++;
        }
        if (s[l] == '(') {
            l++;
            ret += f(l, r);
        }
        if (s[l] == '|') {
            l++;
            return max(ret, f(l, r));
        }
        if (s[l] == ')') {
            l++;
            return ret;
        }
    }
    return ret;
}
int main() {
    scanf("%s", s);
    int x = 0;
    printf("%d\n", f(x, strlen(s)));
    return 0;
}

import java.util.Scanner;
public class Main {

	static int position =0;
	static char [] a;
	public static void main(String[] args) {
		
		
			Scanner in =new Scanner (System.in);
			String str=in.nextLine();
			a=str.toCharArray();
			in.close();
			System.out.println(read());
		
		
	}
	static int  read() {
		int max=0;
		int temp=0;
		while(position<a.length) {
			if(a[position]=='(') {position++;max+=read();continue;}
			
			if(a[position]=='x') {position++;max++;continue;}
			if(a[position]=='|') {position++;temp=max(max,temp);max=0;continue;}
			if(a[position]==')') {position++;return max(max,temp);}
			
			
			
		}
		return max(max,temp);
			
			
			
	}
	private static int max(int max, int temp) {
		if(max>=temp)return max;
		else return temp;
	}	
}

PREV-36 包子凑数

简记:数论常识+打表找规律

#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
int a[maxn], n;
bool vis[maxn * maxn];
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int gcd = a[0];
    for (int i = 1; i < n; i++) {
        gcd = __gcd(gcd, a[i]);
    }
    if (gcd != 1) {
        printf("INF\n");
    } else {
        vis[0] = 1;
        int ans = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < maxn * maxn; j++) {
                if (j - a[i] >= 0) {
                    vis[j] = max(vis[j], vis[j - a[i]]);
                }
            }
        }
        bool first = 1;
        for (int i = 0; i < maxn * maxn; i++) {
            if (!vis[i]) {
                ans++;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}




import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n =in.nextInt();//有几个笼子
        int[] a = new int[n];//存储每个笼子能够装多少包子
        int[] number=new int[10001];//存储能够凑齐的包子数量
        int count=0;
        for (int i=0;i<n;i++){
            a[i]=in.nextInt();
            number[a[i]]=1;
        }
        int g=a[0];
        for (int i =1;i<a.length;i++){
            g=gcd(g,a[i]);
        }
        if (g!=1){
            System.out.println("INF");
        }else {
            for (int i=0;i<a.length;i++){
                for (int j=0;j+a[i]<10001;j++){
                    if (number[j]==1) number[j+a[i]]=1;
                }
            }
            for (int i=0;i<10001;i++){
                if (number[i]==0) count++;
            }
            System.out.println(count-1);//减去number[0]的情况
        }
    }

    //求最大公约数
    public  static  int  gcd(int a,int b){
        return b==0?a:gcd(b,a%b);
    }
}

PREV-37 分巧克力

简记:整体二分答案

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
typedef long long int qq;
struct choc {
    qq h, w;
} a[maxn];
int n;
qq k;
qq f(int x, choc p) { return (p.h / x) * (p.w / x); }
bool is_ok(int x) {
    qq ans = 0;
    for (int i = 0; i < n; i++) {
        ans += f(x, a[i]);
    }
    return ans >= k;
}
int main() {
    scanf("%d%lld", &n, &k);
    for (int i = 0; i < n; i++) {
        scanf("%lld%lld", &a[i].w, &a[i].h);
    }
    int l = 1, r = 1e5;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (is_ok(mid))
            l = mid + 1;
        else
            r = mid - 1;
    }
    printf("%d\n", l - 1);
    return 0;
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static class InputReader{
		public BufferedReader reader;
		public StringTokenizer tokenizer;
		
		public InputReader(InputStream stream) {
			reader = new BufferedReader(new InputStreamReader(stream),32768);
			tokenizer = null;
		}
		
		public String next() {
			while(tokenizer == null || !tokenizer.hasMoreElements()) {
				try {
					tokenizer = new StringTokenizer(reader.readLine());
				}catch(IOException e) {
					throw new RuntimeException(e);
				}
			}
			return tokenizer.nextToken();
		}
		
		public int nextInt() {
			return Integer.parseInt(next());
		}
	}
	public static void main(String[] args) {
		InputReader s = new InputReader(System.in);
		int n = s.nextInt();
		int k = s.nextInt();
		int h[] = new int[n];
		int w[] = new int[n];
		for(int i=0;i<n;i++) {
			h[i] = s.nextInt();
			w[i] = s.nextInt();
		}
		int l=1,r=100000,ans=1;
		while(l<=r) {
			int mid = (l+r)/2;
			int t = 0;
			for(int i=0;i<n;i++) {
				t+=(h[i]/mid)*(w[i]/mid);
				if(t>=k) {
					l = mid+1;
					ans = mid;
					continue;
				}
			}
			if(t<k) {
				r = mid-1;
			}
		}
		System.out.println(ans);
		
	}
}

PREV-38 油漆面积

简记:本来是线段树扫描线的,暴力冲过去了

#include<bits/stdc++.h>
using namespace std;
bool book[10005][10005];
int main(int argc,char **argv)
{
	int cnt,sum=0;
	scanf("%d",&cnt);
	while(cnt--)
	{
		int x1,x2,y1,y2;
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
		int i,j;
		for(i=x1;i<x2;i++)
			for(j=y1;j<y2;j++)
			{
				if(book[i][j]==false)
				{
					book[i][j]=true;
					sum++;
				}
			}
	}
	printf("%d\n",sum);
	return 0;
}

PREV-39 日期问题

简记:模拟

#include <bits/stdc++.h>
using namespace std;
struct data {
    int y, m, d;
    void print() { printf("%d-%02d-%02d\n", y, m, d); }
} s, t;
int day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_run(int x) {
    if (x % 100 == 0) {
        return x % 400 == 0;
    }
    return x % 4 == 0;
}
data operator+(data x, int ppp) {  //+1
    data ret = x;
    ret.d++;
    if (ret.d > day[ret.m] + (ret.m == 2 && is_run(ret.y))) {
        ret.d = 1;
        ret.m++;
        if (ret.m == 13) {
            ret.m = 1;
            ret.y++;
        }
    }
    return ret;
}
bool operator==(data l, data r) {
    return l.y == r.y && l.m == r.m && l.d == r.d;
}
bool operator<=(data l, data r) {
    if (l.y != r.y) {
        return l.y < r.y;
    }
    if (l.m != r.m) {
        return l.m < r.m;
    }
    return l.d <= r.d;
}
void init() {
    s.y = 1960;
    s.m = 1;
    s.d = 1;
    t.y = 2059;
    t.m = 12;
    t.d = 31;
}
int a, b, c;
bool is_ok(data x) {
    if (x.y % 100 == a && x.m == b && x.d == c) return 1;
    if (x.y % 100 == c && x.m == a && x.d == b) return 1;
    if (x.y % 100 == c && x.m == b && x.d == a) return 1;
    return 0;
}
int main() {
    init();
    scanf("%d/%d/%d", &a, &b, &c);
    for (data i = s; i <= t; i = i + 1) {
        if (is_ok(i)) i.print();
    }
    return 0;
}

import java.util.Scanner;
import java.util.TreeSet;


public class Main {

	/**
	 * @param args
	 * @return 
	 */
	public static java.lang.String rq(int a, int b, int c){
		if(a>=0 && a<=59) a = a + 2000;
		else if(a>=60 && a<=99) a = a + 1900;
		else
			return "";
		
		if(b<1 || b>12)
			return "";
		if(c<1 || c>31)
			return "";
		switch(b){
			case 2:
				boolean temp = run(a);
				if(temp){
					if(c>29) return "";}
				else
					if(c>28) 
						return "";
				break;
			case 4:
				if(c>30) return "";
				break;
			case 6:
				if(c>30) return "";
				break;
			case 9:
				if(c>30) return "";
				break;
			case 11:
				if(c>30) return "";
				break;
			
		}
		String _a,_b,_c;
		_a = String.valueOf(a);
		_b = String.valueOf(b);
		_c = String.valueOf(c);
		if(_b.length() == 1)
			_b = "0"+_b;
		if(_c.length() == 1)
			_c = "0"+_c;
		
		return _a+"-"+_b+"-"+_c;
			
	}
	public static boolean run(int a){
		if((a%4==0 && a%100!=0) || a%400==0)
			return true;
		else
			return false;
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner reader = new Scanner(System.in);
		String s = reader.next();
		String _a,_b,_c;
		_a = s.substring(0, 2);
		_b = s.substring(3, 5);
		_c = s.substring(6, 8);
		int a,b,c;
		a = Integer.parseInt(_a);
		b = Integer.parseInt(_b);
		c = Integer.parseInt(_c);
		_a=rq(a,b,c);
		_b=rq(c,a,b);
		_c=rq(c,b,a);
		TreeSet<String> ss = new TreeSet<String>();
		if(_a.length()!=0) ss.add(_a);
		if(_b.length()!=0) ss.add(_b);
		if(_c.length()!=0) ss.add(_c);
		for(String sss : ss){
			System.out.println(sss);
		}
	}
	

}

PREV-40 k倍区间

简记:简单维护思想

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
typedef long long int qq;
int n, a[maxn], c[maxn], s[maxn], k;
int main() {
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        s[i] = (s[i - 1] + a[i]) % k;
        c[s[i]]++;
    }
    qq ans = 0;
    for (int i = 1; i <= n; i++) {
        ans += c[s[i - 1]];
        c[s[i]]--;
    }
    printf("%lld\n", ans);
    return 0;
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {

	private static long ans = 0L;
	private static int num;

	public static void main(String[] args) throws IOException {
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		in.nextToken();
		int n = (int) in.nval;
		in.nextToken();
		int k = (int) in.nval;
		ans = 0;		
	
		int[] sum = new int[100005];
	
		int[] cnt = new int[100005];
		cnt[0] = 1;
		for (int i = 1; i <= n; i++) {
			in.nextToken();
			int t = (int) in.nval;
			sum[i] = (sum[i - 1] + t) % k;
			ans += cnt[sum[i]];
			cnt[sum[i]]++;
		}
		out.println(ans);
		out.flush();
	}

}

PREV-41 Excel地址

简记:进制知识

#include <bits/stdc++.h>
using namespace std;
typedef long long int qq;
int a[100];
int main() {
    qq n;
    while (scanf("%lld", &n) != EOF) {
        int cnt = 0;
        while (n) {
            if (n % 26 == 0) {
                a[cnt++] = 26;
                n /= 26;
                n--;
            } else {
                a[cnt++] = n % 26;
                n /= 26;
            }
        }
        for (int i = cnt - 1; i >= 0; i--) {
            char c = 'A' + a[i] - 1;
            printf("%c", c);
        }
        printf("\n");
    }
    return 0;
}

import java.util.Scanner;

public class Main {
	
	
	public static void main(String[] args){
		
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		char[] c = new char[100];
		int cnt = 0;
		
		while(n!=0){//500
			if(n%26==0){
				c[cnt++]=26+64;
				n/=26;//19 // 0
				n--;//18 //-1
			}else{
				c[cnt++]=(char) (n%26+64);//
				n/=26;//n=1
			}
			
		}
		for(int i=cnt-1;i>=0;i--)
			System.out.print(c[i]);
		
	}

}

PREV-42 九宫幻方

简记:dfs暴力搜索即可

#include <bits/stdc++.h>
using namespace std;
int a[3][3], ans[3][3];
int vis[10], num = 0;
bool is_ok() {
    int e = (1 + 9) * 9 / 2;
    e /= 3;
    for (int i = 0; i < 3; i++) {
        int s1 = 0, s2 = 0;
        for (int j = 0; j < 3; j++) {
            s1 += a[i][j];
            s2 += a[j][i];
        }
        if (s1 != e || s2 != e) return 0;
    }
    if (a[0][0] + a[1][1] + a[2][2] != e) return 0;
    if (a[0][2] + a[1][1] + a[2][0] != e) return 0;
    return 1;
}
void out() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    printf("-----\n");
}
void dfs(int dep) {
    if (num == 2) return;
    if (dep == 9) {
        // out();
        if (is_ok()) {
            num++;
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++) {
                    ans[i][j] = a[i][j];
                }
        }
        return;
    }
    int x = dep % 3, y = dep / 3;
    // printf("dep=%d (%d,%d)=%d \n",dep,x,y,a[x][y]);
    if (a[x][y] != 0)
        dfs(dep + 1);
    else {
        for (int i = 1; i <= 9; i++) {
            if (vis[i]) continue;
            a[x][y] = i;
            vis[i] = 1;
            dfs(dep + 1);
            a[x][y] = 0;
            vis[i] = 0;
        }
    }
}
int main() {
    memset(vis, 0, sizeof(vis));
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            scanf("%d", &a[i][j]);
            vis[a[i][j]]++;
        }
    }
    dfs(0);
    if (num == 1) {
        for (int i = 0; i < 9; i++) {
            printf("%d", ans[i / 3][i % 3]);
            if (i % 3 == 2)
                printf("\n");
            else
                printf(" ");
        }
    } else {
        printf("Too Many\n");
    }
    return 0;
}

PREV-43 拉马车

#include <stdio.h>
#include <string.h>
void StartGame(char *HandCardA, char *HandCardB, char *TableCard);
int CheckCard(char TableCard[]);
void GetCard(char *GettedString, int keyStay, char *TableCard);
int EndGame(char EndString[]);
void GetCardRealHand(char *ChangedString);
int NumberCard;
int main() {
    char HandCardA[30];           // A手中的牌
    char HandCardB[30];           // B手中的牌
    char TableCard[60] = {'\0'};  //桌面上的牌

    gets(HandCardA);  //获取A的手牌
    gets(HandCardB);  //获取B的手牌

    NumberCard = strlen(HandCardA) +
                 strlen(HandCardB);  //获取总牌数(作为一种程序结束条件)

    StartGame(HandCardA, HandCardB, TableCard);  // Strat Game
}

void StartGame(char *HandCardA, char *HandCardB, char *TableCard) {
    int HandSortOrder = 0;  //用于判断出牌顺序
    while (1) {
        if (HandSortOrder % 2 == 0)  // turn:A   (:first)
        {
            strncat(TableCard, HandCardA, 1);
            GetCardRealHand(HandCardA);
            HandSortOrder += 1;
            if (CheckCard(TableCard) >= 0) {
                GetCard(HandCardA, CheckCard(TableCard), TableCard);
                HandSortOrder += 1;
            }
            if (EndGame(HandCardA) == 1) {
                puts(HandCardA);
                break;
            } else if (EndGame(HandCardA) == 2) {
                puts(HandCardB);
                break;
            }

        } else  // turn B
        {
            strncat(TableCard, HandCardB, 1);
            GetCardRealHand(HandCardB);
            HandSortOrder += 1;
            if (CheckCard(TableCard) >= 0) {
                GetCard(HandCardB, CheckCard(TableCard), TableCard);
                HandSortOrder += 1;
            }
            if (EndGame(HandCardB) == 1) {
                puts(HandCardB);
                break;
            } else if (EndGame(HandCardB) == 2) {
                puts(HandCardA);
                break;
            }
        }
    }
}

int CheckCard(char TableCard[])  //查询是否有与之前相同的牌,并返回牌的下表
{
    int LenTableCard = strlen(TableCard), i;
    for (i = 0; i < LenTableCard - 1; i++) {
        if (TableCard[LenTableCard - 1] == TableCard[i]) {
            return i;
        }
    }
    return -1;
}

void GetCard(char *GettedString, int keyStay, char *TableCard)  //从桌面上获取牌
{
    int LenTableCard = strlen(TableCard), i;
    // strncat(GettedString, TableCard + keyStay, LenTableCard - keyStay);
    for (i = LenTableCard - 1; i >= keyStay; i--) {
        strncat(GettedString, TableCard + i, 1);
    }
    TableCard[keyStay] = '\0';
}

int EndGame(char EndString[])  //是否达到结束游戏的条件(1.全部牌集中在一个人手中
                               //2.一人没有手牌)
{
    if (strlen(EndString) == NumberCard) {
        return 1;
    }
    if (strlen(EndString) == 0) {
        return 2;
    }
    return 0;
}

void GetCardRealHand(
    char *
        ChangedString)  //每个人出牌后的手牌
                        //PS:我没找到C语言中没有相关剪切的库函数调用,所以需要复制后,自己删除
{
    int LenChangeString = strlen(ChangedString), i;
    for (i = 0; i < LenChangeString - 1; i++) {
        ChangedString[i] = ChangedString[i + 1];
    }
    ChangedString[LenChangeString - 1] = '\0';
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String strA = br.readLine();
		String strB = br.readLine();
		br.close();
		game(strA,strB);
		
	}

	private static void game(String strA, String strB) {
		Stack<String> stack = new Stack<>();
		while(true) {
			while(true){
				String a = strA.substring(0,1);
				strA = strA.substring(1);
				String temp = isWin(stack, a, strA);
				if (temp.equals(strA)) {
					break;
				}else {
					strA = temp;
				}
			}
			if (strA.length() == 0) {
				break;
			}
			while(true) {
				String b = strB.substring(0, 1);
				strB = strB.substring(1);
				String temp = isWin(stack, b, strB);
				if (temp.equals(strB)) {
					break;
				}else {
					strB = temp;
				}
			}
			if (strB.length() == 0) {
				break;
			}
		}
		if (strA.length() > strB.length()) {
			System.out.println(strA);
		}else {
			System.out.println(strB);
		}
	}

	private static String isWin(Stack<String> stack, String a, String str) {
		if (stack.search(a) > 0) {
			str += a;
			while (true) {
				String temp = (String)stack.pop();
				str += temp;
				if (temp.equals(a)) {
					break;
				}
			}
		}else {
			stack.push(a);
		}
		return str;
	}

}

PREV-44 青蛙跳杯子

简记:bfs

#include <bits/stdc++.h>
using namespace std;
const int bas = 15;
int mov[6] = {-3, -2, -1, 1, 2, 3}, len;
struct state {
    int a[bas], pos, step, hast = -1;
    int hash() {
        // if(hast!=-1)return hast;
        int ret = 0;
        for (int i = 0; i < len; i++) {
            ret = ret * 3 + a[i];
            // printf("ret=%d\n",ret);
        }
        return ret;
    }
    void input(char *s, int n) {
        for (int i = 0; i < n; i++) {
            if (s[i] == '*') {
                a[i] = 0;
                pos = i;
            }
            if (s[i] == 'W') a[i] = 1;
            if (s[i] == 'B') a[i] = 2;
        }
    }
    void print() {
        printf("%d  ", step);
        for (int i = 0; i < len; i++) {
            printf("%d", a[i]);
        }
        printf("\n");
    }
};
bool vis[15000000];
queue<state> q;
int bfs(state s, state t, int n) {
    len = n;
    memset(vis, 0, sizeof(vis));
    vis[s.hash()] = 1;
    s.step = 0;
    q.push(s);
    int e = t.hash();
    while (!q.empty()) {
        // q.front().print();
        if (q.front().hash() == t.hash()) return q.front().step;
        state now = q.front();
        now.step++;
        for (int i = 0; i < 6; i++) {
            if (now.pos + mov[i] < 0 || now.pos + mov[i] >= len) continue;
            int t = now.a[now.pos];
            now.a[now.pos] = now.a[now.pos + mov[i]];
            now.a[now.pos + mov[i]] = t;
            now.pos += mov[i];
            now.hast = -1;

            int add = now.hash();
            if (vis[add]) {
                t = now.a[now.pos];
                now.a[now.pos] = now.a[now.pos - mov[i]];
                now.a[now.pos - mov[i]] = t;
                now.pos -= mov[i];
                now.hast = -1;
                continue;
            }
            vis[add] = 1;
            q.push(now);
            // printf("step=%d\n",now.step);
            // printf("@1 ");now.print();

            t = now.a[now.pos];
            now.a[now.pos] = now.a[now.pos - mov[i]];
            now.a[now.pos - mov[i]] = t;
            now.pos -= mov[i];
            now.hast = -1;

            // printf("@2 ");now.print();
        }
        q.pop();
    }
}
int main() {
    // printf("%lf\n",pow(3,15));
    char temp[100];
    state s, t;
    scanf("%s", temp);
    s.input(temp, strlen(temp));
    scanf("%s", temp);
    t.input(temp, strlen(temp));
    printf("%d\n", bfs(s, t, strlen(temp)));
    return 0;
}


import java.util.*;


public class Main {
    static class Fron {
        String now;
        int step;
        int pos;

        Fron(String now, int step, int pos) {
            this.now = now;
            this.pos = pos;
            this.step = step;
        }
    }

    static String start, end;
    static Queue<Fron> q = new ArrayDeque<Fron>();
    static Map<String, Integer> m = new HashMap<String, Integer>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        start = sc.nextLine();
        end = sc.nextLine();
        int pos = 0;
        for (int i = 0; i < start.length(); i++) {
            if ('*' == start.charAt(i)) {
                pos = i;
                break;
            }
        }
        System.out.println(bfs(start, 0, pos));
        sc.close();
    }

    private static int bfs(String now, int step, int pos) {
        Fron f = new Fron(now, step, pos);
        q.offer(f);
        while (!q.isEmpty()) {
            Fron status = q.poll();
            if (status.now.equals(end)) {
                return status.step;
            }
            String temp;
            if (m.containsKey(status.now)) {
                continue;
            } else {
                m.put(status.now, 1);
            }
            if (status.pos + 1 < start.length()) {
                temp = status.now;
                temp = swap(status.pos, status.pos + 1, temp);
                Fron fNext = new Fron(temp, status.step + 1, status.pos + 1);
                if (!m.containsKey(temp)) {
                    q.offer(fNext);
                }
            }
            if (status.pos + 2 < start.length()) {
                temp = status.now;
                temp = swap(status.pos, status.pos + 2, temp);
                Fron fNext = new Fron(temp, status.step + 1, status.pos + 2);
                if (!m.containsKey(temp)) {
                    q.offer(fNext);
                }
            }
            if (status.pos + 3 < start.length()) {
                temp = status.now;
                temp = swap(status.pos, status.pos + 3, temp);
                Fron fNext = new Fron(temp, status.step + 1, status.pos + 3);
                if (!m.containsKey(temp)) {
                    q.offer(fNext);
                }
            }
            if (status.pos - 1 > -1) {
                temp = status.now;
                temp = swap(status.pos, status.pos - 1, temp);
                Fron fNext = new Fron(temp, status.step + 1, status.pos - 1);
                if (!m.containsKey(temp)) {
                    q.offer(fNext);
                }
            }
            if (status.pos - 2 > -1) {
                temp = status.now;
                temp = swap(status.pos, status.pos - 2, temp);
                Fron fNext = new Fron(temp, status.step + 1, status.pos - 2);
                if (!m.containsKey(temp)) {
                    q.offer(fNext);
                }
            }
            if (status.pos - 3 > -1) {
                temp = status.now;
                temp = swap(status.pos, status.pos - 3, temp);
                Fron fNext = new Fron(temp, status.step + 1, status.pos - 3);
                if (!m.containsKey(temp)) {
                    q.offer(fNext);
                }
            }
        }
        return -1;
    }

    private static String swap(int i, int j, String now) {
        char[] c = now.toCharArray();
        char temp = c[i];
        c[i] = c[j];
        c[j] = temp;
        now = new String(c);
        return now;
    }

}

PREV-45 图形排版

#include <stdio.h>
#include <algorithm>
#include <set>
#define ll long long
using namespace std;
typedef struct {
    int a, b, sum, w, mmax;
} node;
node x[100010];
int r[100010];
int main() {
    int m, n;
    scanf("%d%d", &m, &n);
    int sum = 0;
    int nowm = m, mmax = 0;
    for (int i = 0; i < n; i++) {
        if (nowm == 0) {
            sum += mmax;
            mmax = 0;
            nowm = m;
        }
        scanf("%d%d", &x[i].a, &x[i].b);
        int a = x[i].a, b = x[i].b;
        if (a > nowm) {
            b = nowm * b / a + ((nowm * b) % a ? 1 : 0);
            a = nowm;
        }
        x[i].mmax = mmax;
        x[i].w = nowm;
        x[i].sum = sum;
        if (b > mmax) mmax = b;
        nowm -= a;
    }
    sum += mmax;
    for (int i = n - 1; i >= 0; i--) {
        nowm = m, mmax = 0;
        int j;
        for (j = i; j < n && nowm; j++) {
            int a = x[j].a, b = x[j].b;
            if (a > nowm) {
                b = nowm * b / a + ((nowm * b) % a ? 1 : 0);
                a = nowm;
            }
            if (b > mmax) mmax = b;
            nowm -= a;
        }
        r[i] = mmax + r[j];
    }
    int ans = sum;
    for (int i = 0; i < n; i++) {
        nowm = x[i].w, mmax = x[i].mmax;
        int j;
        for (j = i + 1; j < n && nowm; j++) {
            int a = x[j].a, b = x[j].b;
            if (a > nowm) {
                b = nowm * b / a + ((nowm * b) % a ? 1 : 0);
                a = nowm;
            }
            if (b > mmax) mmax = b;
            nowm -= a;
        }
        int res = x[i].sum + mmax + r[j];
        if (res < ans) ans = res;
    }
    printf("%d\n", ans);
    return 0;
}
import java.io.*;
import java.util.*;
 
public class Main {
	public static void main(String[] arg) {
		new Main().solve();
	}
	
	StringTokenizer ST;
	BufferedReader BR;
	PrintWriter PW;
	
	String next() {
		while(ST == null || !ST.hasMoreTokens()) {
			try {
				ST = new StringTokenizer(BR.readLine());
			}catch (Exception e) {
				// TODO: handle exception
				throw new RuntimeException(e);
			}
		}
		return ST.nextToken();
	}
	
	int nextInt() {
		return Integer.parseInt(next());
	}
	
	void solve() {
		BR = new BufferedReader(new InputStreamReader(System.in));
		PW = new PrintWriter(System.out);
		
		int m = nextInt(), n = nextInt();
		Pair a[] = new Pair[n + 10];
		Triple cr[] = new Triple[n + 10];
		cr[0] = new Triple();
		//正向处理出加到第i块的状态,Triple记忆第i块右下坐标(x,y)和第i块缩放后的高度h
		for(int i = 1; i <= n; i++) {
			Triple tmp = new Triple(cr[i-1]);
			if(tmp.x == m) tmp.x = tmp.h = 0;
			
			a[i] = new Pair(nextInt(), nextInt());
			cr[i] = new Triple();
			
			Pair b = Change(a[i], m - tmp.x);
			cr[i].x = tmp.x + b.x;
			cr[i].h = Math.max(tmp.h, b.y);
			cr[i].y = cr[i].h + tmp.y - tmp.h;
		}
		
		Triple A[] = new Triple[m];
		Triple B[] = new Triple[m];
		for(int i = 0; i < m; i++) {
			A[i] = new Triple();
			B[i] = new Triple();
		}
		
		int ans = cr[n].y;
		for(int i = n; i >= 1; i--) {
            //处理删除第i块的答案ah
			Triple pre = cr[i-1];
			int ah;
			if(pre.x == m) {
				ah = pre.y + B[0].y;
			} else {
				ah = pre.y - pre.h + B[pre.x].y - B[pre.x].h + Math.max(pre.h, B[pre.x].h);
			}
			ans = Math.min(ans, ah);
			
			//逆向DP,处理出第i至n块从(0,j)位置开始放置
			for(int j = 0; j < m; j++) {
				Pair b = Change(a[i], m - j);
				Triple tmp;
				if(j + b.x == m) tmp = new Triple(0, B[0].y, 0);
				else tmp = new Triple(B[j + b.x]);
				
				A[j].h = Math.max(b.y, tmp.h);
				A[j].y = A[j].h + tmp.y - tmp.h;
			}
			
			for(int j = 0; j < m; j++)
				B[j] = new Triple(A[j]);
		}
		
		PW.print(ans);
 
		
		PW.close();
	}
	
	Pair Change(Pair A, int x) {
		if(A.x <= x) return new Pair(A);
		return new Pair(x, (A.y * x + A.x - 1) / A.x);
	}
}
 
 
class Pair implements Comparable<Pair> {
	int x, y;
	
	Pair() { }
	
	Pair(Pair A) { x = A.x; y = A.y; }
	
	Pair(int x, int y) {
		this.x = x; this.y = y;
	}
	
	@Override
	public int compareTo(Pair A) {
		return x == A.x ? y - A.y : x - A.x;
	}
}
 
class Triple {
	int x, y, h;
	
	Triple() {}
	
	Triple(int x, int y, int h) {
		this.x = x; this.y = y; this.h = h;
	}
	
	Triple(Triple A) {
		x = A.x; y = A.y; h = A.h;
	}
	
	@Override
	public String toString() {
		return String.valueOf(x) + " " + String.valueOf(y) + " " + String.valueOf(h);
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯题库 历届试题部分(C++、Java)代码实现(31-45) 的相关文章

  • 蛇形方阵

    题目描述 给出一个不大于 9 的正整数 n 输出 n n 的蛇形方阵 从左上角填上 1 开始 顺时针方向依次填入数字 如同样例所示 注意每个数字有都会占用 3 个字符 前面使用空格补齐 输入 4 输出 1 2 3 4 12 13 14 5
  • 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。并排序[c实现]

    void merge int nums1 int nums1Size int m int nums2 int nums2Size int n int end1 m 1 int end2 n 1 int end n m 1 while end
  • 一种关于单片机定时器中断和数码管冲突问题的解决方案

    问题发现 我们会发现 同时存在定时器中断和数码管操作时 有时会导致数码管显示异常 原因探究 在定时器中断函数中不要操作P2和P0 因为定时器 T 和主板 M 的时钟频率不一样 有可能导致M刚操作完P2 T又去操作P0 导致正确的P2和P0没
  • 2022第十三届蓝桥杯国赛真题javaB组

    文章目录 试题A 重合次数 试题B 数数 试题C 左移右移 试题D 窗口 试题E 迷宫 试题F 小球称重 试题G 背包与魔法 试题H 修路 试题I 围栏 试题J 好数之和 试题A 重合次数 本题总分 5 分 问题描述 在同一天中 从上午6
  • Python:每日一题之最少砝码

    问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意 小于等于 N 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入格式 输入包含一个正整数 N 输出格式 输出一个整数代表答案 样例输入
  • 青少年ptyhon可以参加的主流比赛大全

    青少年python教学视频ppt源码 青少年python系列目录 老程序员115的博客 CSDN博客 一 全国青少年软件编程等级考试 主办单位 中国电子学会 全国青少年电子信息科普创新联盟 网址 http www qceit org cn
  • openGL之API学习(一九三)glGenTextures

    生成纹理单元名 单元名不一定是连续的 但是没有使用的 单元名是相对GL TEXTURE0的 对于单元名1 其实是GL TEXTURE0 1 glGenTextures产生的是一个比较小的整数id 纹理单元名 glActiveTexture激
  • 蓝桥云课——长草 Python (广度优先遍历)

    这种题应该不是Python组的吧 跑了跑其他人的题解发现最后一组解都会超时 权当抛砖引玉了吧 题目地址 长草 先上BFS模板 def Bfs 参数 while quene 空 cur quene pop 0 弹出队列第一项 for code
  • xml转义字符

    在mybatis在编写sql时不能在XML里直接使用 lt 或者是 gt 在这里需要使用转义字符替换 下面列举常用的xml转义对应 1 lt lt 小于号 2 gt gt 大于号 3 amp 和 4 apos 单引号 5 quot 双引号
  • 2018年第九届蓝桥杯C/C++A组省赛 题面&部分题解

    首先 原题 链接 https pan baidu com s 1UzRN6Mf2Dwp0263F MMESg 密码 2ryh 第一题 标题 分数 1 1 1 2 1 4 1 8 1 16 每项是前一项的一半 如果一共有20项 求这个和是多少
  • 树与二叉树(二叉树的表示,性质,遍历,还原)

    1 基本术语 A 或B 是I的祖先 I是A 或B 的子孙 D是I的双亲 I是D的孩子 节点的孩子个数称为节点的度 树中节点的最大度数称为树的度 度大于0的节点称为分支节点 度等于0的节点称为叶节点 定义树根为第一层 则 树的深度 高度 为5
  • C++:压缩算法1.0

    题目描述 某压缩算法的基本思想是用一个数值和一个字符代替具有相同值的连续字符 例如 输入字符串 RRRRRGGBBBBBBC 压缩后为 5R2G6B1C 请编写程序实现上述功能 输入 输入共一行 一串待压缩的字符 输出 输出共一行 压缩后的
  • 1093: 数1的个数

    存限制 128 MB 题目描述 给定一个十进制正整数n 1 n 10000 写下从1到n的所有整数 然后数一下其中出现的数字 1 的个数 例如当n 2时 写下1 2 这样只出现了1个 1 当n 12时 写下1 2 3 4 5 6 7 8 9
  • 蓝桥杯-2020年省赛-回文日期

    498 import datetime n input start datetime date int n 4 int n 4 6 int n 6 delta datetime timedelta days 1 flag 0 for i i
  • 关于C++函数返回值的使用方式以及局部对象何时析构的问题

    关于C 局部对象何时析构的探讨 我之前一直笼统的认为局部在函数调用结束之后 所有的局部变量会立刻析构 经过仔细分析之后才发现还有很多细节 这里对比了函数返回值的使用 Test t t fun 赋值 和 Test t fun 初始化 假设有一
  • 使用大块内存的设置

    C 如下分配内存的代码 booleantempTag true do try double K NULL int nnz cout lt lt 请输入分配内存大小 MB lt
  • 动态规划之多重背包模型

    前置知识 01背包问题 动态规划之01背包模型 如何何何的博客 CSDN博客 完全背包问题 动态规划之完全背包模型 如何何何的博客 CSDN博客 多重背包问题 给定一个有一定容量的背包 和 n 个物品 每个物品有 si 件 每个物品有其对应
  • 蓝桥杯-快乐数-力扣

    202 快乐数 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果这个过程 结果为 1 那
  • G - Ginger的NB数(二分)

    G Ginger的NB数 SDUT OnlineJudge include
  • 【快速选择算法】O(n)时间复杂度

    快速选择的期望时间复杂度为O n 最坏时间复杂度为O n 2 当每次划分只划分为n 1个和1个时 由于划分时间复杂度为O n 最坏时间复杂度为O n 2 void quickselect vector

随机推荐

  • 【c++】——STL容器之vector的使用和模拟实现

    目录 1 vector的概述 2 vector常用接口 2 1 构造函数 2 2 迭代器的使用 2 3 修改的接口 push back pop back insert erase find reverse 2 4 关于容量接口 resize
  • 2020-06-09

    应该或者说必须努力下去 这只是为了生存得有意义一点 现在也许可以出错 那就去试试看 至少去做过了一些事情 有一天发现自己真的应该去试试的时候 有可能又有其他原因会让你不再敢去了 或是自身的原因 或是家庭的原因 或是环境的原因 有些年纪是可以
  • 关于串口收发数据出现全零或者收发数据位不同或者数据位一样,数据不匹配的问题

    近日用串口终端通过ttl转ra232来收发嵌入式开发板的数据 打开串口终端的收发数据全为零 以为是自己开发板上数据线出现问题 经过测试 开发板完全正常 转接电路也正常 但是不管是接收还是发送数据依然出现是全零的现象 对此做如下测试 默认设置
  • C++技能系列 ( 3 ) - 详解C++泛型模版和特化模版的使用

    系列文章目录 C 技能系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 期待你的关注哦 有更多博文系列等着看哦 会经常更新 因为你的关注激励着我的创作 快乐在于态度 成功在于细节 命运在于习惯 Happiness
  • CSDN-markdown编辑器

    欢迎使用Markdown编辑器 你好 这是你第一次使用 Markdown编辑器 所展示的欢迎页 如果你想学习如何使用Markdown编辑器 可以仔细阅读这篇文章 了解一下Markdown的基本语法知识 新的改变 我们对Markdown编辑器
  • MongoDB版本升级指南

    原文 MongoDBhttp t zoukankan com realcp1018 p 15532868 html 官方文档提供了版本升级的说明 本文只介绍3 0 gt 3 2 gt 3 4 gt 3 6 gt 4 0 gt 4 2之间的升
  • Hadoop开启后jps显示只有jps

    之前在用Mapreduce写代码时 在DFS Location下的会报一个error 大体的意思就是与主机名相关的错误 然后我就觉得可能时Hadoop开启时出了错误 然后我就重启了Hadoop jps查看了一下 果然出现了错误 可见jps命
  • 有趣的数据结构算法17——哈夫曼编码及其c语言实现

    有趣的数据结构算法17 哈夫曼编码及其c语言实现 什么是哈夫曼编码 哈夫曼编码过程举例 利用c语言实现哈夫曼编码 生成哈夫曼树 生成哈夫曼编码 解码与编码 全部实现代码 GITHUB下载连接 哈夫曼编码真的好复杂噢 什么是哈夫曼编码 哈夫曼
  • 工具类-Queue、Deque类总结

    Queue Deque类总结 Queue类的简介 Queue类方法的使用 Deque类的简介 Deque类方法的使用 ArrayDeque类的简介 ArrayDeque类方法的使用 Queue类的简介 Queue是Java中实现队列的接口
  • 正则化(Regularization)

    过拟合问题 Overfitting 当我们对一个问题建立线性回归模型或逻辑回归模型时 不恰当的选择特征会导致过拟合问题 过拟合问题是指当我们选择了很多的特征值时 模型对数据集的每一个example都符合的很好 但是对新的example却预测
  • linux远程访问neo4j

    一 首先确保权限 看看能不能打开防火墙端口 我在搭建好了之后遇到了问题 WebSocket connection failure Due to security constraints in your web browser 尝试了几个方法
  • Linux中的read函数

    2023年7月11日 周二晚上 在 Linux 中 read 函数是一个系统调用 用于从文件描述符 file descriptor 中读取数据 头文件是unistd h 它的原型如下 include
  • 关于嵌入式人工智能?

    关于嵌入式人工智能 虽然学术界目前还没有嵌入式人工智能的确切定义 但随着人工智能的发展 势必会下沉到边缘 终端和嵌入式市场 嵌入式人工智能将会是未来几年AI发展的方向之一 并将伴随一系列的职位和角色涌现 最近很多小伙伴找我 说想要一些嵌入式
  • 基于STM32F103单片机的智能温室大棚RS485通信温湿度监测

    系统功能设计 末尾附文件 STM32单片机智能大棚485上传温湿度光照检测补光 本系统由STM32单片机RS485采集板和STM32单片机RS485显示按键板组成 采集板由STM32F103C8T6单片机 RS485通信模块 光照采集 温湿
  • springboot 一个项目中配置多个redis实例

    在实际的项目中 可能一个项目需要操作多个不同redis的数据 那么我们就需要做相应的配置 以下是基于springboot 首先在我们项目的 application proterties中添加如下配置 有几个就写几个 注意这里的命名 spri
  • 使用ffmpeg 命令分割视频方法

    用法说明 ss 起始时间 i 要分割的是频文件 t 分割时长 格式如下 可以是 t xx 单位 秒 或者 t 01 00 00 时 分 秒 注意 ss 要放在 i 之前 实例 ffmpeg ss 00 00 00 i Video 20210
  • JS实现翻译的多种方案

    JS实现翻译的多种方案 1 language js 库 https languages js org docs 适应于 React Angular 和 Vue2 需要时再学 import Languages from languages j
  • 分库分表实战(7):抽丝剥茧 — 千万级数据之sql优化下篇

    V X ruyuanhadeng获得600 页原创精品文章汇总PDF 前言 上一期 我们讲解了sql优化的一般流程 不管是优化join语句 where语句 聚合函数还是排序操作 核心在于利用索引来优化sql语句 但是 大家以为我们为字段创建
  • sonar报java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)

    昨天运行sonar还好好的 今天运行就自动退出了 sonar log日志文件如下 gt Wrapper Started as Console Launching a JVM Wrapper Version 3 2 3 http wrappe
  • 蓝桥杯题库 历届试题部分(C++、Java)代码实现(31-45)

    文章目录 五 历届试题 PREV 31 小朋友排队 PREV 32 分糖果 PREV 33 兰顿蚂蚁 PREV 34 矩阵翻硬币 PREV 35 正则问题 PREV 36 包子凑数 PREV 37 分巧克力 PREV 38 油漆面积 PRE