当前位置: 首页 > article >正文

蓝桥杯刷题第十三天

第一题:特殊日期

问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 11 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,2022 年 11 月 13 日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。
请提交满足条件的日期的总数量。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
运行限制
最大运行时间:1s
最大运行内存: 256M

暴力枚举,加判断

判断日期合法,以及满足条件

#include<iostream>
using namespace std;

bool isleap(int year){
  return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}

bool check(int x){
  int year = x / 10000;
  int month = x / 100 % 100;
  int day = x % 100;
  if(day < 1 || day > 31 || month < 1 || month > 12) return false;
  if(month == 2)
    if(isleap(year) && day > 29) return false;
    else if(!isleap(year) && day > 28) return false;
  if(month == 4 || month == 6 || month == 9 || month == 11)
    if(day > 30) return false;
  return true;
}

int main(){
  int ans = 0;

  for(int i = 19000101; i <= 99991231; i++){
    int a = i / 10000000;
    int b = i / 1000000 % 10;
    int c = i / 100000 % 10;
    int d = i / 10000 % 10;
    int e = i / 1000 % 10;
    int f = i / 100 % 10;
    int g = i / 10 % 10;
    int h = i % 10;
    if(a + b + c + d == e + f + g + h && check(i))
      ans++;
  }

  cout<<ans<<endl;
  return 0;
}

第二题:重合次数

问题描述
在同一天中, 从上午 6 点 13 分 22 秒到下午 14 点 36 分 20 秒, 钟表上的 分针和秒针一共重合了多少次?
注意时针、分针、秒针都围绕中心敳匀速运动。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
运行限制
最大运行时间:1s
最大运行内存: 512M

规律,每过一分钟一次重合

47 + 59 * 7 + 34

第三题:左移右移

问题描述
小蓝有一个长度为 N 的数组, 初始时从左到右依次是 1,2,3,…N
之后小蓝对这个数组进行了 M 次操作, 每次操作可能是以下 2 种之一:
左移 x, 即把 x 移动到最左边。
右移 x, 即把 x 移动到最右边。
请你回答经过 M 次操作之后, 数组从左到右每个数是多少?
输入格式
第一行包含 2 个整数, NM
以下 M 行每行一个操作, 其中 “L x "表示左移 ,"Rx "表示右移 x
输出格式
输出 N 个数, 代表操作后的数组。
样例说明
样例中的数组变化如下:
[1,2,3,4,5]→[3,1,2,4,5]→[2,3,1,4,5]→[2,3,4,5,1]
评测用例规模与约定
对于 50%50% 的评测用例, 1≤N,M≤10000.
对于 100%100% 的评测用例, 1≤N,M≤200000,1≤xN.

样例输入

5 3
L 3
L 2
R 1

样例输出

2 3 4 5 1

每个位置都有对应的权重

往左边移动权重变为最小,往右边移动权重最大

再排序权重,即得到序列

#include<iostream>
#include<algorithm>
using namespace std;

typedef pair<int, int> PII;
const int N = 200010;
int n, m;
PII a[N];

bool cmp(PII a, PII b){
  return a.second < b.second;
}

int main(){
  scanf("%d%d", &n, &m);

  for(int i = 1; i <= n; i++){
    a[i].first = i;
    a[i].second = i;
  }

  int cnt1 = -3e6 + 1, cnt2 = 3e6 + 1;
  while(m--){
    string op; int x;
    cin>>op; cin>>x;
    if(op == "L") a[x].second = cnt1--;
    else a[x].second = cnt2++;
  }

  sort(a + 1, a + 1 + n, cmp);

  for(int i = 1; i <= n; i++)
    cout<<a[i].first<<" ";

  return 0;
}

第四题:近似gcd

题目链接:近似gcd - 蓝桥云课 (lanqiao.cn)

还得是梗佬,厉害厉害

参考佬代码写的

#include<iostream>
using namespace std;

typedef long long LL;
int n, g, a[100010];

int main(){
  scanf("%d%d", &n, &g);

  for (int i = 1; i <= n; ++i) {
        int x;
        cin >> x;
        a[i] = (x % g == 0);
        a[i] += a[i - 1];
    }
    int l = 0;
    LL ans = 0;
    for (int r = 2; r <= n; ++r) {
        while (l + 1 < r && a[r] - a[l] < r - l - 1) l++;
        ans += r - l -1;
    }

    cout << ans << endl;
  return 0;
}

http://www.kler.cn/a/2154.html

相关文章:

  • netcore 集成Prometheus
  • W25Q128读写实验(一)
  • docker springboot 运维部署详细实例
  • 【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器
  • 时间序列异常值检测方法
  • 基础数据结构---栈
  • ChatGPT和百度文心一言写用例,谁更强?
  • 移除元素(双指针)
  • 《剑指Offer》笔记题解思路技巧优化——精心编写(1)
  • “你要多弄弄算法”
  • 南京邮电大学数据库第三次课后作业
  • 什么是推挽输出,开漏输出?
  • 【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程
  • Qt优秀开源项目之十七:QtPromise
  • PostgreSQL学习总结(12)—— PostgreSQL 内置函数汇总
  • 第十七天 JavaScript、Vue详细总结
  • 队列实现及leetcode相关OJ题
  • Redis 如何实现库存扣减操作和防止被超卖?
  • 【业务安全-02】业务逻辑漏洞之越权操作
  • 测试老鸟都在用的接口抓包常用工具以及接口测试工具都有哪些?
  • 【C++】二叉搜索树
  • WebService简单入门
  • python+django+vue全家桶鲜花商城售卖系统
  • 机器学习——无监督学习
  • 基于java下的Springboot框架实现幼儿园管理系统
  • 【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(6)