lqb省赛日志[1/37]

一只小蒟蒻备考蓝桥杯的日志

笔记

mod

在这里插入图片描述

进制转换

进制转换——颠覆小蒟蒻认知了!
在这里插入图片描述

轻轻崩溃

题目描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。

他计划周一至周五每天做 a 道题目,周六和周日每天做 b道题目。

请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

输入格式
输入一行包含三个整数 a , b 和 n。

输出格式
输出一个整数代表天数。

输入样例
10 20 99

输出样例
8

数据范围
对于 50% 的评测用例,1≤a,b,n≤10^6,
对于 100% 的评测用例,1≤a,b,n≤10^18
  1. 这么简单,应该是送分题,但是!
  2. (1)数据范围 10^18 -> long long
  3. (2)考点:模拟,但是这么大的数据量你不会真一次次加吧?
  4. (3)简单计算题,先算几个星期,然后推出日期

前缀和 差分

参考 前缀和以及差分看这一篇就够了
…居然这么基础的都忘记了
一维数组公式:
s[i] = s[i-1]+a[i]
二维数组公式:
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + arr[i][j]

双指针(夹逼)

参考 双指针法—将序列双层遍历优化为单层
步骤:

  1. 确定左右边界
  2. 循环
    1. 条件判断,左移右边界or右移左边界
    2. 碰撞检测

人脑思维…->计算机思维

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
  
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
  
样例输入
52

样例输出
899998
989989
998899

数据规模和约定
  1<=n<=54。

我居然…一门心思把回文数找出来,结果是有策略的枚举
核心代码:

//ijkkji
	if (N % 2 == 0) {
		for(int i = 1; i <= 9; i++) {
			for(int j = 0; j <= 9; j++) {
				for(int k = 0; k <= 9; k++) {
					if((i + j + k)*2 == N) {
						cout << i * 100000 + j * 10000 + k * 1100 + j * 10 + i << endl;
					}
				}
			}
		}
	}

Attention:
不要轻易 /2, 以这题为例,很容易舍,然后WA,很心疼

历史遗留问题1–22年B组初赛

最小

#include <stdio.h>
#include <iostream>
#include <string.h>

using namespace std;

long long cal[505][505];

long long Cal(int i, int j) {
	return (cal[i - 1][j] + cal[i][j - 1] - cal[i - 1][j - 1]);
}

long long Cal2(int x1, int y1, int x2, int y2) { //including (x1, y1)
	cout << cal[x2][y2] << " " << cal[x2][y1 - 1] << " " << cal[x1 - 1][y2] << " " << cal[x1 - 1][y1 - 1]; 
	return (cal[x2][y2] - cal[x2][y1 - 1] - cal[x1 - 1][y2] + cal[x1 - 1][y1 - 1]);
}

int main() {
	int N, M, K;
	cin >> N >> M >> K;
	memset(cal, '\0', sizeof(cal));
	for(int i = 1; i <= N; i++) {
		for(int j = 1; j <= M; j++) {
			int input;
			cin >> input;
			cal[i][j] = Cal(i, j) + input;
		}
	}

	for(int i = 1; i <= N; i++) {
		for(int j = 1; j <= M; j++) {
			cout << cal[i][j] << " ";
		}
		cout << endl;
	}
	
	int ans = 0;
	for(int left = 1; left <= M; left++) {
		for(int right = left; right <= M; right++) {
			//left and right border have been decided
			for(int top = 1, botton = 1; top <= N && botton <= N; botton++) {
				int mid = Cal2(left, top, right, botton);
				cout << mid << endl;
				while(top <= botton && mid > K){
					top++;
				}
				/*Wrong Display start*/
//				ans += (botton - top + 1) * (botton - top) / 2;
				/*不是在top到button间进行组合,必须包含top行
				 不然top下移的时候,大大repeat了*/
				/*end*/
				
				if(top <= botton) {
					ans += (botton - top + 1);
					cout<< left << " " << top  << "     " << right << " " << botton << endl;
				}
			}
		}
	}
	cout << ans << endl;
	return 0;
}

/*我的left right top botton && x  y错乱了*/

历史遗留问题2–试题 基础练习 阶乘计算

试题 基础练习 阶乘计算

#include <stdio.h>
#include <iostream>
#include <string.h>

using namespace std;

int main() {
	int N;
	cin >> N;
	int mid[50] = {1};
	int mid_index = 0;
//	string str = to_string(N);
//	int length = str.length();

	for(int i = 1; i <= N; i++) {
		mid_index++;
		string s = to_string(i);
		int i_length = s.length();
		int i_arr[i_length + 5];
		memset(i_arr, '\0', sizeof(i_arr));
		int i_ = i;
		for(int j = 0; j < i_length; j++) {
			i_arr[j] = i_ % 10;
			i_ /= 10;
		}
		cout << "i_length= "<< i_length << endl;
		int mid_mid[50];
		memset(mid_mid, '\0', sizeof(mid_mid));
		for(int j = 0; j < i_length; j++) {
			for(int k = 0; k < mid_index; k++) {
				mid_mid[j + k] += mid[k] * i_arr[j];
			}
		}
		
		cout << mid_index << endl;
		for(int j = 0; j < mid_index + i_length - 1; j++) {
			cout << j << endl;
			if(mid_mid[j] > 9) {
				mid_mid[j + 1] += (mid_mid[j] / 10);
				mid[j] = mid_mid[j] % 10;
			}
		}
		
		if(mid_mid[mid_index + i_length - 1] != '\0') {
			mid[mid_index + i_length - 1] = mid_mid[mid_index + i_length - 1];
			mid_index = mid_index + i_length - 1;
		} else {
			mid_index = mid_index + i_length - 2;
		}
		cout << mid_index << endl;
//		
//		cout << mid_index << endl;
	}
	for(int i = mid_index; i >= 0; i--) {
		cout << mid[i];
	}
	return 0;
}

刷题

  1. 蓝桥杯22年初赛,做了一半,没全过,改天debug
  2. 试题 基础练习 特殊回文数

心得

  1. 不要轻易 /2, 第2题的血泪教训

小结

“业精于勤荒于嬉,行成于思毁于随”
小蒟蒻一个月,冲省一!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值