2023蓝桥杯题解 仅C、D

发布于:2024-12-20 ⋅ 阅读:(43) ⋅ 点赞:(0)

2023蓝桥杯题解

洛谷2023蓝桥杯C题
洛谷2023蓝桥杯D题

C题 [蓝桥杯 2023 省 A] 平方差

题目描述

给定 L , R L,R L,R,问 L ≤ x ≤ R L \leq x \leq R LxR 中有多少个数 x x x 满足存在整数 y , z y,z y,z 使得 x = y 2 − z 2 x=y^2-z^2 x=y2z2

输入格式

输入一行包含两个整数 L , R L,R L,R,用一个空格分隔。

输出格式

输出一行包含一个整数满足题目给定条件的 x x x 的数量。

样例 #1

样例输入 #1

1 5

样例输出 #1

4

提示

【样例说明】
  • 1 = 1 2 − 0 2 1=1^2-0^2 1=1202
  • 3 = 2 2 − 1 2 3=2^2-1^2 3=2212
  • 4 = 2 2 − 0 2 4=2^2-0^2 4=2202
  • 5 = 3 2 − 2 2 5=3^2-2^2 5=3222
【评测用例规模与约定】

对于 40 % 40 \% 40% 的评测用例, L , R ≤ 5000 L,R \leq 5000 L,R5000

对于所有评测用例, 1 ≤ L ≤ R ≤ 1 0 9 1 \leq L \leq R \leq 10^9 1LR109

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C

#include<bits/stdc++.h>
using namespace std;
int main()
{
   int L,R,temp,res=0;
   cin>>L>>R;
   if (L>R){
   	temp=L;
   	L=R;
   	R=temp;
   }
   for(int i=L;i<=R;i++){
   	if(i<0)
   		continue;
   	if(i&1||i%4==0)
   	{
   		res++;
	}

   }
   cout<<res; 
}

在这里插入图片描述

D题 [蓝桥杯 2023 省 A] 更小的数

题目描述

image

小蓝有一个长度均为 n n n 且仅由数字字符 0 ∼ 9 0 \sim 9 09 组成的字符串,下标从 0 0 0 n − 1 n-1 n1,你可以将其视作是一个具有 n n n 位的十进制数字 n u m num num,小蓝可以从 n u m num num 中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字 n u m n e w num_{new} numnew 满足条件 n u m n e w < n u m num_{new}<num numnew<num,请你帮他计算下一共有多少种不同的子串选择方案,只要两个子串在 n u m num num 中的位置不完全相同我们就视作是不同的方案。

注意,我们允许前导零的存在,即数字的最高位可以是 0 0 0,这是合法的。

输入格式

输入一行包含一个长度为 n n n 的字符串表示 n u m num num(仅包含数字字符 0 ∼ 9 0 \sim 9 09),从左至右下标依次为 0 ∼ n − 1 0 \sim n-1 0n1

输出格式

输出一行包含一个整数表示答案。

样例 #1

样例输入 #1

210102

样例输出 #1

8

提示

【样例说明】

一共有 8 8 8 种不同的方案:

  1. 所选择的子串下标为 0 ∼ 1 0\sim1 01,反转后的 n u m n e w = 120102 < 210102 num_{new} = 120102 < 210102 numnew=120102<210102
  2. 所选择的子串下标为 0 ∼ 2 0\sim2 02,反转后的 n u m n e w = 012102 < 210102 num_{new} = 012102 < 210102 numnew=012102<210102
  3. 所选择的子串下标为 0 ∼ 3 0\sim3 03,反转后的 n u m n e w = 101202 < 210102 num_{new} = 101202 < 210102 numnew=101202<210102
  4. 所选择的子串下标为 0 ∼ 4 0\sim4 04,反转后的 n u m n e w = 010122 < 210102 num_{new} = 010122 < 210102 numnew=010122<210102
  5. 所选择的子串下标为 0 ∼ 5 0\sim5 05,反转后的 n u m n e w = 201012 < 210102 num_{new} = 201012 < 210102 numnew=201012<210102
  6. 所选择的子串下标为 1 ∼ 2 1\sim2 12,反转后的 n u m n e w = 201102 < 210102 num_{new} = 201102 < 210102 numnew=201102<210102
  7. 所选择的子串下标为 1 ∼ 4 1\sim4 14,反转后的 n u m n e w = 201012 < 210102 num_{new} = 201012 < 210102 numnew=201012<210102
  8. 所选择的子串下标为 3 ∼ 4 3\sim4 34,反转后的 n u m n e w = 210012 < 210102 num_{new} = 210012 < 210102 numnew=210012<210102
【评测用例规模与约定】

对于 20 % 20\% 20% 的评测用例, 1 ≤ n ≤ 100 1 \le n \le 100 1n100

对于 40 % 40\% 40% 的评测用例, 1 ≤ n ≤ 1000 1 \le n \le 1000 1n1000

对于所有评测用例, 1 ≤ n ≤ 5000 1 \le n \le 5000 1n5000

#include<bits/stdc++.h>
using namespace std;
string s;
int lens,ans;
bool if_(int l,int r)
{
	for(int i = l,j = r;i <= j;i++,j--)
	{
		if(s[i] > s[j]) return true;
        else if(s[j] > s[i]) return false;
	}
	return false;
}
int main()
{
	cin >> s;
	lens = s.length();
	for(int i = 0;i < lens;i++)
	{
		for(int j = i+1;j < lens;j++)
		{
			if(if_(i,j)) ans++;
		}
	}
	cout << ans;
	return 0;
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到