2019CCPC江西省赛(重现赛)| 题目 & 题解

2023年五一数学建模 | 第二十届五一数学建模C题:“双碳”目标下低碳建筑研究 阅读详情

2019CCPC江西省赛(重现赛)在hdu进行

据说很简单

因为现场有多个队伍AK

然鹅

我在40分钟内AC两题之后 就卡在概率题 (后来就没做题目emmm)

先放官方题解 

然后慢慢补题

嗯!

题目:

https://pan.baidu.com/s/1nYWq8dWcS9csJDXGWTqHmA 提取码: 8pg4 复制这段内容后打开百度网盘手机App,操作更方便哦

题解:

https://pan.baidu.com/s/1bISMx_yH9yb5NJVirZQ61w 提取码: 4kn4 复制这段内容后打开百度网盘手机App,操作更方便哦

 

目录

K.签到题

F.签到题2

H.数学题

I.签到题3

J.最小公倍数

G.暴力模拟

D.暴力枚举

A.树的重心


 

K.签到题

解方程

已知 x = a+b y =a-b 求a*b 可以得知 a = (x+y)/2 b = x-a

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

using namespace std;

int main()
{
    int x,y;
    int a,b;
    scanf("%d%d",&x,&y);
    a = (x+y)/2;
    b = (x-a);
    printf("%d\n",a*b);
    return 0;
}

F.签到题2

因为只需要 a,v,i,n 四种字母

先判断这四种字母出现的个数

如果本身没有达到存在这四种字母 则不可能构成avin 答案是 0/1

达到四种字母都存在 则再次计算可能出现avin的次数 

PS:要注意分子与分母是否可以同分 (取分子分母得到公因子 同时除掉公因子

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
using namespace std;
int gcd(int a,int b)
{
    if (b==0)return a;
    return gcd(b,a%b);
}
int a[30];
int main()
{
    int t,x=0,y=0,sum=0;
    char m;
    while (~scanf("%d", &t)) {
            getchar();
        memset(a, 0, sizeof a);
        for (int i = 0; i < t; i++) {
            scanf("%c", &m);
            a[m - 'a' + 1] ++;
        }
        for (int i = 1; i <= 26; i++) {
            if (a[i] > 0) {
                sum =sum+a[i];
            }
        }

        x = a[1]*a[9]*a[14]*a[22];
        y = pow(sum,4);
          if (x>0)
          {
              if (gcd(x,y)>1)
                printf("%d/%d\n",x/gcd(x,y),y/gcd(x,y));
              else printf("%d/%d\n",x,y);
          }
            else printf("0/1\n");
    }
    return 0;
}

H.数学题

在【1,n】之间任取一个数 R, 然后在【1,R】中任取一个数得到 L, 得到区间【L1,R1】

再任取一次,得到区间【L2,R2】,求两区间有交集的概率对1e9+7取模

首先 理解什么是逆元 以及如何线性求逆元

参考:https://blog.youkuaiyun.com/qq_35416331/article/details/81059747

https://www.cnblogs.com/Judge/p/9383034.html#_label1

https://www.cnblogs.com/chy-2003/p/9656801.html#%E7%BA%BF%E6%80%A7%E6%B1%82%E9%80%86%E5%85%83

题目中的公式推导 参考博文:https://blog.youkuaiyun.com/toohandsomeieaseid/article/details/96757205

AC代码

#include<iostream>
#include<cstring>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e6 + 5;
const int p = 1e9 + 7;
ll inv[maxn], sum[maxn];
ll quickpow (ll x, ll y)
{
    ll res = x;
    ll ans = 1;
    while (y) {
        if (y & 1) {
            ans = (ans * res)%p;
        }
        res = (res * res)%p;
        y = y >> 1;
    }
    return ans;
}

int main()
{
    inv[0] = 1;
    inv[1] = 1;
    for (int i = 2; i < maxn; i++) {
        inv[i] = ((p - p / i) * inv[p % i]) % p;
    }
    memset(sum, 0, sizeof sum);
    for (int i = 1; i <= maxn; i++) {
        sum[i] = sum[i - 1] + inv[i];
    }
//
//    for (int i = 0; i < 10; i++) {
//        printf("%lld\n", sum[i]);
//    }

    int n;
    while (~scanf("%d", &n)) {
        ll ans = 0;
        for (int i = 1; i <= n; i++) {
            ll temp = 0;
            temp += i * inv[n] % p;
            temp = temp * ((sum[n] - sum[i] + p) % p) % p;
            temp = (temp % p) * inv[n] % p;
            ans = (ans + temp) % p;
        }
        ans += (3 + n) * quickpow(4 * n, p - 2);
        ans %= p;
        printf("%lld\n", ans);
    }
    return 0;
}

下面是我自己写的过程和理解

 

 

I.签到题3

这道题理解错题目意思 然后一直想不通为啥就WA了

其实是 将第三位小数位进位到前一位 所增加的数之和(可以为负

代码如下:

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

int main()
{
    int t, a, c;
    char b;

    while (~scanf("%d", &t)) {
            double sum = 0;
        for (int i = 0; i < t; i++) {
            scanf("%d%c%d", &a, &b, &c);
            c = c % 10;
            if (c <= 4) {
                sum -= 0.001 * c;
            } else {
                sum += 0.001 * (10-c);
            }
        }
        printf("%.3lf\n", sum);
    }
    return 0;
}

 

J.最小公倍数

题目意思:n个工厂和m个工人 给出每个工厂每天能处理的订单数a[i]

问 是否存在一种情况使得 每个工厂每天处理的订单数相同 且所有人都要在工作 (即 没有多余的工人不工作)

存在则输出“Yes”以及每一个工厂的人数

否则 就输出“No”

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[10005], b[10005];
ll gcd(ll a, ll b)
{
    return b ? gcd(b, a % b) : a;
}
int main()
{
    int n ;
    ll m;
    while (~scanf("%d%lld", &n, &m)) {
        ll ans = 1, sum = 0;
        for (int i = 0; i < n; i++) {
            scanf("%lld", &a[i]);
        }
        ll mm = gcd(a[0], a[1]);
        ans = a[0] * a[1] / mm;
        for (int i = 2; i < n; i++) {
            mm = gcd(ans, a[i]);
            ans = ans * a[i] / mm;
        }
        for (int i = 0; i < n; i++) {
            b[i] = ans / a[i];
            sum += b[i];
        }
//        for (int i=0;i<n;i++)
//            printf("%d**\n",b[i]);
        if (sum <= m && m % sum == 0) {
            printf("Yes\n");
            for (int i = 0; i < n - 1; i++) {
                printf("%lld ", b[i] * (m / sum));
            }
            printf("%lld\n", b[n - 1] * (m / sum));

        } else {
            printf("No\n");
        }
    }
    return 0;
}

注意:题目中m的范围是 1~ 10^18,而不是1018(辣鸡题面 小声bb

所以要用 long long  保存数据

还有在计算最小公倍数的时候 要注意

是先求出前面的最小公倍数 与后面的数求公约数 再次得到最小公倍数

举个栗子

3 4 6 8 的最小公倍数是24 而不是3 * 4 * 6 * 8 

 

G.暴力模拟

参考:https://www.cnblogs.com/Dup4/p/11223762.html

第一遍读题目没有弄清题意

看了题解才知道是 在一个十字路口,有nn辆东西走向的车,他们会在 a[i] 时刻到达,有m辆南北走向的车,他们会在 b[i] 时刻到达。问需要让m辆南北走向的车整体等待多少秒,使得他们的开始行动之后不会和东西走向的车相撞?

找到可以取到 b[j] - a[i] 不等于 X 的最小值

数据范围都是 1~1000 可以直接暴力枚举

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll const mod = 998244353;
int a[2005], b[2005];
int main()
{
    int n, m, x;
    while (~scanf("%d%d", &n, &m)) {
        memset(a, 0, sizeof a);
        memset(b, 0, sizeof b);
        for (int i = 0; i < n; i++) {
            scanf("%d", &x);
            a[x] = 1;
        }
        for (int i = 0; i < m; i++) {
            scanf("%d", &b[i]);
        }
        int p = 0;
        for (int i = 0; i < m; i++) {
            if (a[b[i] + p] == 1) {
                p++;
                i = 0;//全部重新判断一遍
            }
        }
        printf("%d\n", p);
    }
    return 0;
}

D.暴力枚举

我是傻子嘛555 为啥重现赛的时候不好好做题

感觉没有很难啊QAQ

题目大意:

形成 wave 的条件

1)它至少包含两个元素;

2)奇数位置的所有元素都是相同的;

3)偶数位置的所有元素都是相同的;

4)奇数位置的元素与偶数位置的元素不同。

由1)、2)、3) 可以推断出 wave 中含有的数字有且仅有两种 

求所给数组中 形成wave 的最长的长度

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll const mod = 998244353;
int a[100005], pos[103][100005], num[103];
int main()
{
    int n, c;
    scanf("%d%d", &n, &c);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    for (int k = 1; k <= n; k++)
        for (int i = 1; i <= c; i++) {
            if (a[k] == i) {
                num[i]++;
                pos[i][num[i]] = k;
            }
        }
    int d = 0;
    int flag;
    for (int i = 1; i < c; i++)
        for (int j = i + 1; j <= c; j++) {
            if (num[i] > 0 && num[j] > 0) {
                int ans = 0, sum = 0;
                int m  = min(pos[i][1], pos[j][1]);
                int mm = max(pos[i][num[i]], pos[j][num[j]]);
                if (m == pos[i][1]) {
                    flag = 1;
                    for (int k = m; k <= mm; k++) {
                        if (a[k] == i && flag == 1) {
                            flag = 0;
                            sum++;
                        }
                        if (a[k] == j && flag == 0) {
                            flag = 1;
                            sum++;
                        }
                        d = max(d, sum);
                    }
                } else {
                    flag = 0;
                    for (int k = m; k <= mm; k++) {
                        if (a[k] == j && flag == 0) {
                            flag = 1;
                            sum++;
                        }
                        if (a[k] == i && flag == 1) {
                            flag = 0;
                            sum++;
                        }
                        d = max(d, sum);
                    }
                }
            }
        }
    printf("%d\n", d);
    return 0;
}

因为我不喜欢用数据结构(其实是太菜了不会QAQ

看了别人的题解还是不懂 然后硬算暴力写了一个多小时emmm 终于AC了

我的代码思想就是 把所有数字的位置存起来 然后枚举某两个数字的位置 判断是否间隔着出现 将他们计数取最大值

数组用的比较多 不过本身数据不大 没有炸

 

A.树的重心

 

参考:https://blog.youkuaiyun.com/Ratina/article/details/96753811

 

C.数论

暂时不会 

留一个坑……

 

参考:https://www.cnblogs.com/Dup4/p/11223762.html

 

 

遗传算法(GA)全面解析:从生物基础到工程实践 本文全面解析了遗传算法(GA),从其生物基础到工程实践应用。遗传算法模拟自然进化过程,通过选择、交叉和变异等操作在解空间中高效搜索最优解。文章详细介绍了算法的生物学基础(达尔文进化论、孟德尔遗传定律)、基本概念(种群、个体、基因等)和核心思想。重点阐述了遗传算法的数学模型,包括编码机制、适应度函数设计、遗传算子(选择、交叉、变异)以及关键控制参数。最后提供了一个完整的Python实现示例,展示了遗传算法求解函数最大值问题的具体应用。该算法具有群体搜索、概率导向、无需梯度等特点,适用于各类复杂优化问题。 阅读详情

相关推荐

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

2019年CCPC-江西省赛部分题解

目录 B - Wave C - String D - Traffic F - Budget G - Worker H - Class B - Wave 题意: 给一个n个整数的序列,整数范围为1~c,求一个子序列满足偶数位上数字相同,奇数位上数字相同,且奇偶位上的数字不同。 输出满足要求的最长子序列的长度。 思路: 简单 DP,设是以 结尾, 为结尾前一个数字的最长合法 wave, 则有状态转移方程:。 AC代码: #include&lt;bits/stdc++.h&..

dabaitutunaitang的博客 543

基于FPGA的DDR学习——1.基础知识

⚪DDR2(Double Data Rate2)SDRAM是由JEDEC(电子设备工程联合委员会)开发的第三代SDRAM内存技术标准,1.8V工作电压,240线接口,提供了相较于DDR SDRAM更高的运行效能与更低的电压,同样采用在时钟的上升/下降沿同时进行数据传输的基本方式,但拥有两倍于上一代DDR内存预读取能力(即4bit数据预取能力),其常见的频率规范有DDR2 400\533\667\800\1066\1333等,总线频率553MHZ的DDR2内存只需133MHZ的工作频率。

qq_44932488的博客 2070

2019年CCPC-江西省赛(重现赛)部分题解

前言 下了场雪,差点没给学校埋了,教学楼时不时停个电、断个网的。 这些我都能忍,为啥还能有只把灯的电给停了的呢?差点就以为是自己给机房灯干坏了。 这让我想到了之前宿舍楼的光缆被挖掘机挖断的事情,给大家伙逗乐了属实是。 1006 - String(思维) 比赛链接:https://acm.dingbacode.com/submit.php?pid=6572 题目大意 给出一个长度为n的字符串。 每次从字符串中随机取出一个字符,再放回去。 一共取4次,请问按照取字符的顺序组成的字符串有多少几率是"avin"

Mr.RainsdRop的胡思乱想 577

嵌入式Linux Qt应用程序卡死问题分析记录

根据应用和系统层面的分析,软件功能异常和卡死现象的原因是系统控制台/dev/console阻塞导致依赖其的相关应用和命令异常。系统控制台/dev/console阻塞的原因还未确定,最近的软件版本和其他测试同事未出现该问题,所以很大可能是串口线的问题,待后续有进展了继续更新。

V10_x的博客 1642

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 1590

2021CCPC网络赛题解加总结

1001 :切电线 题目大意是在街道上有无穷多个街灯编号从1开始,街灯之间是用电线相连的。但是连线是有规则的,如果街灯的编号 x 是偶数,则它与编号为 x / 2相连。如果街灯的编号 x 是奇数,那么它和 3*x+1 相连,给定n,问你站在街灯编号为 n 和 n+1 之间能剪掉多少根电线。(左边的街灯编号&lt;=n,右边的街灯编号&gt;n)。 数据范围如下: 由图易看出暴力枚举那一定会超时,不过一般没人会用。只需要分情况算出奇数连的线和偶数连的线相加就行了,需要找几个例子去推一下。 #include

MH3709的博客 6122

C#图表开发避坑指南:Chart控件的Series和Points属性详解

本文深入解析C#图表开发中Chart控件的Series和Points核心属性,提供避坑指南。详细阐述了Series的数据序列管理、Points的高效操作与空值处理,以及多Series与ChartArea的协同配置,帮助开发者避免常见错误,实现稳定、高性能的数据可视化应用。

weixin_29313239的博客 363

2019CCPC江西省程序设计大赛

asdf

huangkai1128的博客 596

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2188

端到端自动驾驶的精准测试场景开发

1. 背景介绍 自动驾驶技术的发展正在改变交通运输的未来,然而,要实现安全可靠的自动驾驶,需要进行大量的测试和验证。端到端自动驾驶系统的测试场景开发是实现这一目标的关键。本文将详细介绍端到端自动驾驶的精准测试场景开发,包括核心概念、算法原理、数学模型、项目实践,以及未来发展趋势。 2. 核心概念与联系

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1319

2019江西省赛ccpc题解

题号不分前后,后续接着补题,写一些自己感悟,及心得。 String 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6572 Avin has a string. He would like to uniform-randomly select four characters (selecting the same character is allowe...

i_like1ac的博客 790

YOLOv11 损失函数进阶:Varifocal Loss 让正负样本精度双升

创建self.alpha = alpha # 正样本权重系数self.gamma = gamma # 聚焦系数self.lambda_reg = lambda_reg # 回归损失权重# 分类损失:Varifocal Classification Loss# 正样本权重:基于预测置信度# 计算 BCE 损失并加权cls_loss = cls_loss.sum() / (cls_true.sum() + 1e-6) # 按正样本数归一化。

m0_71589036的博客 440

2019CCPC-江西省赛(重现赛)队伍题解

2019CCPC江西省赛(重现赛) 第一次组队(和队内dalao:hzf)参加比赛,这次比赛使用的是我的笔电,但因为我来的比较晚,没有提前磨合:比如我的64键位键盘导致hzf突然上手不习惯。 Solved A B C D E F G H I J K 4 / 11 Ø O Ø O Ø O - - - O Ø O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝...

橘嘉禾 105

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2019CCPC-江西省赛(重现赛)- 感谢南昌大学

这次江西省赛的重现赛,一共解了4题,整体感觉不怎么好,能做更好的。 。。。。不废话了,看解题吧。 K题是本次比赛的水体, K - Class HDU - 6577 Avin has two integers a, b (1 ≤ a, b ≤ 1, 000). Given x = a + b and y = a - b, can you calculate ab? Input The first ...

weixin_43913594的博客 638

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2019CCPC-江西省赛(重现赛)

1004 Wave 对于每一个新出现的数,判断1~c哪些数是在该数前面出现的,在这个基础上再加上1就可以了 # include &lt;bits/stdc++.h&gt; using namespace std; int vis[110]; int dp[110][110]; int main() { int n,c; while(~scanf("%d %d",&amp;n,&amp;c...

qq_44378175的博客 899

HDU重现赛之2019CCPC-江西省赛

本人蒟蒻,5个小时过了5道,看到好几个大佬AK,%%%%%%% http://acm.hdu.edu.cn/contests/contest_show.php?cid=868 先放大佬的题解(不是我写的。。同学给的),能理解多少就靠你们自己了,还是希望大家能从大佬的题解中有所收获 口胡题解: A. Co-Tree:由目标函数提到的两两距离和,可想到,在树上找个点,使得它到其它点距离和...

weixin_30716725的博客 277

HDU重现赛之2019CCPC-江西省赛:1004 Wave

//果然还是要看别人的博客增长见识,哦哈哈哈,加油町酱~~~ //多校打的很自闭,昨天打了杭电的江西省赛,一共出了8个题,都是队友出的,补一下两个相对难一点的题1001,1004,我用谷歌直接翻译了一下,其实题目是英文的。。。 题解:因为数的范围是1~100,其实我们可以列举出所有的数,只是一个双层循环,然后再把取出的两个数(包括他们的位置)放在vector里,然后排序(按位置),然后查找(其实...

Gragon_sgirlfriend的博客 500

HPU 18级个人训练( 2019CCPC-江西省赛(重现赛))

只写我能补的几道题把,能力有限,实在是太菜了;;;;呜呜呜呜哭哭 题目链接:2019CCPC-江西省赛(重现赛) D:HDU 6570 Wave F: String HDU - 6572 G: Traffic HDU - 6573 H: Rng HDU - 6574 I : Budget HDU - 6575 J: Worker HDU - 6576 ...

wait 275

2019.7.28 2019江西省赛 + COJ2019夏欢赛 小结

index &gt; 2019江西省赛 + COJ2019夏欢赛 2019CCPC-江西省赛(重现赛)概览 题号 标题 做法 状态 A Cotree * 树形dp √+1 B Math C Trap D Wave 想法/dp √+1 E Packing F String 想法 √ G Traffic 想法 √+1 H Rng I B...

TieWay59的博客 320

HDU重现赛之2019CCPC-江西省赛 6576

6576 比例分配问题 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include&lt;string&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; #include&lt;ctime&gt; #include&lt;algorithm&gt...

abc1235454的博客 437

2019年ccpc女生赛重现赛题解H

题目: Clock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description wls 有一个钟表,当前钟表指向了某一个时间。 又有一些很重要的时刻,w...

pxlsdz的博客 507

2019CCPC-江西省赛(重现赛)D - Wave HDU - 6570

题文: Avin is studying series. A series is called “wave” if the following conditions are satisfied: It contains at least two elements; All elements at odd positions are the same; All elements at even p...

殇尘的博客 475
上一篇: 2019CCPC江苏南京女生赛 | 总结
下一篇: 2019暑假多校训练第二场 | 部分题解
OneLine_
博客等级 码龄9年 48粉丝 72原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值