2024 暑假友谊赛-热身1

android广告SDK原理详解(附源码) 广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这 阅读详情

2024 暑假友谊赛-热身1

2024.7.11 14:00————17:00

过题数3/9
补题数5/9

  • AtCoder abc079_d
  • AtCoder arc100_a
  • AtCoder arc099_a
  • AtCoder arc100_b
  • CodeForces 1808C
  • CodeForces 1547E
  • CodeForces 1107C
  • AtCoder arc102_b
  • AtCoder abc297_g

A - Wall

Floyd算法,当时想到了不过写错了一点,17/19,acm赛制一分没有。后来改用dfs,太久没写了导致dfs也写不出来,后来没过。赛后补题用的是Floyd算法,有时间再用dfs。
题解:
给定二维数组c,代表从数字i变成j所需要的能量,给出一个h行w列的数组a,要求把a中所有数字变成1所需的最小能量。
数据范围不大,直接floyd枚举即可。具体见注释。
代码:

#include<iostream>
#include<algorithm>
#include<math.h>
#include<cmath>
#include<queue>
#include<stack>

using namespace std;
#define int long long

int h,w;
int c[10][10];
int a[205][205];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> h >> w;
    for (int i = 0; i <= 9; i++) {
        for (int j= 0; j <= 9; j++) {
            cin >> c[i][j];
        }
    }
    for (int k = 0; k <= 9; k++) {
        for (int i = 0; i <= 9; i++) {
            for (int j = 0; j <= 9; j++) {
                c[i][j] = std::min(c[i][j], c[i][k] + c[k][j]);
            }
        }
    }//Floyd算法,k注意在外侧即可
    int ans = 0;
    for (int i = 1; i <= h; i++) {
        for (int j = 1; j <= w; j++) {
            cin >> a[i][j];
            if(a[i][j]!= -1) {
                ans += c[a[i][j]][1];
            }
        }
    }
    cout << ans << endl;
    return 0;
}



B - Linear Approximation

额很有趣的一道题吧,最近刚好学了三分,想用三分写但是,一直过不了,改了很久还是过不了,后来是数学思维求解的。
继续补题中,改了个三分代码,ac的那种
题解:
给出一个包含n个数字的数组a,求b为多少时伤心值最小。
三分思想很简单,l从-1e9,r从1e9,一直取俩点并舍去不合适区间,直到剩下一些些的时候直接便利即可,只有五十分,不知道错哪了,具体见注释。
数学思维因为取点最后一定是在俩点中间,所以取最中点与取中间任意一点相等,直接取存在的中点即可。
代码:

#include<iostream>
#include<algorithm>
#include<math.h>
#include<cmath>
#include<queue>
#include<stack>

using namespace std;
#define int long long

int n;
int a[200005];
int b[200005];

int check(int x) {
    int res = 0;
    for(int i = 1; i <= n; i++) {
        res += abs(a[i]-(i+x));
    }
    return res;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        a[i] = a[i] - i;
    }sort(a+1,a+n+1);

    int res = a[n/2+1];
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        ans += abs(a[i]-res);
    }
    cout << ans << endl;
//    int l = -1000000005, r = 1e9+10;
//    while (r - l > 50) {
//        int mid1 = l+(r-l)/3;
//        int mid2 = r-(r-l)/3;
//        if(check(mid1) > check(mid2))l = mid1-1;
//        else r = mid2+1;
//    }
//
//    int mi = 1e9+5;
//    for (int i = l; i <= r; i++) {
//        cout << check(i) << "asd" << i << ' ';
//        if(check(i) < mi)mi = check(i);
//    }
//    cout << mi << endl;
//    错误的长长的三分代码
    return 0;
}
//已AC
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cmath>
#include<queue>
#include<stack>

using namespace std;
#define int long long

int n;
int a[200005];

int check(int x) {
    int res = 0;
    for(int i = 1; i <= n; i++) {
        res += abs(a[i]-x);
    }
    return res;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        a[i] = a[i] - i;
    }sort(a+1,a+n+1);
    int l = -1e12, r = 1e12+10;
    int ans = 4e18;
    for (int i = 0; i <= 300; i++){
        int mid1 = l+(r-l)/3;
        int mid2 = r-(r-l)/3;
        ans = min(ans,check(mid1));
        ans = min(ans,check(mid2));
        if(check(mid1) > check(mid2))l = mid1;
        else r = mid2;
        //如果写l=mid1-1,r=mid2+1,就是14/15,因为r-l=3,l=2,可能一直错过中间点
        //在这中间反复横跳,啊举了例子但是忘记了
    }
//    for (int i = l; i <= r; i++) {
//        ans = min(ans,check(i));
//    }//顺手再检验一下
    cout << ans << endl;
    //不理解十足的不理解,让我再学学再来改
    //我来了!我懂了!我真的懂了!
    return 0;
}

C - Minimization

哦简单题
题解:
n个数字从1到n,每次框取k个数字变成这其中的最小值,要求最后所有数都变成1。
按顺序分组,从包含1的那组开始框取即可。
代码:

#include<bits/stdc++.h>

using namespace std;
#define int long long

int k,n;
int a[100005];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    cout << ceil((double)(n-1)/(double)(k-1)) << endl;
    return 0;
}


D - Equal Cut

看出来是三分了但是做不出来,加上没时间了就直接过了没写。后来补题的时候还是有点懵,三分变形吧算是。
题解:
给定含n个数字的数组a,切三刀变成三个数组的和分别是p,q,r,s,求最大值与最小值差值的最小值。
先中间切一刀,开始遍历这个中间数,然后左右分别切一刀,希望切下来的俩块使差值尽可能小。然后每个中间数的最小值比较即可。用了一些前缀和思想,方便运算。
代码:

#include<iostream>
#include<algorithm>
#include<math.h>
#include<cmath>
#include<queue>
#include<stack>

using namespace std;
#define int long long

int n;
int a[200008];
int qz[200008];

bool check(int x,int y, int aaa) {
    if(abs((x+a[aaa]) - (y-a[aaa])) < abs(x - y)) return true;
    else return false;
}//判断是否要加上aaa未知的数字a

signed main() {
    cin >> n;
    a[0] = 0;
    qz[0] = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        qz[i] = qz[i-1] + a[i];
    }

    int b = 1,e = 3;
    //b,e是左右俩刀
    int ans = 1e9+5;

    for (int i = 2; i <= n-2; i++) {
    //i是中点
        int p = qz[b];
        int q = qz[i] - qz[b];
        int r = qz[e] - qz[i];
        int s = qz[n] - qz[e];
        while (check(p,q,b+1) && b+1 < i) {
            b++;
            p = qz[b];
            q = qz[i] - qz[b];
        }//一直加到俩边尽可能接近
        while (check(r,s,e+1) && e+1 < n) {
            e++;
            r = qz[e] - qz[i];
            s = qz[n] - qz[e];
        }
        
        int test[10];
        test[0]=p;test[1]=q;
        test[2]=r;test[3]=s;
        sort(test,test+4);
        ans = min(ans,test[3]-test[0]);
        //每次遍历的最小值都要相比
    }

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

G - Brutality

字符串简单题,题意比较绕,读懂即可
题解:
给出n个数字代表每一次的伤害值,给出k代表每个键最多可连点数(注意,点了其他的键才算破坏连点,停顿仍然算作连续)给出键值,可跳过不可乱序。
直接暴力。
代码:

#include<iostream>
#include<algorithm>
#include<math.h>
#include<cmath>
#include<queue>
#include<stack>

using namespace std;
#define int long long

int n,k;
int a[200005];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> k;
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }
    string s;
    cin >> s;
    int res = 1;
    int ans = 0;
    for (int i = 1; i < s.length()+1; i++) {
        if(s[i] == s[i-1]) {
            res++;
        }
        else {
            sort(a+i-res,a+i);
            for (int j = i-1; j >= max(i-k,i-res); j--) {
                ans += a[j];
            }
            res = 1;
        }
//        cout << ans << endl;
    }
    cout << ans << endl;
    return 0;
}

多核系统核间通信(IPC)设计:从硬件机制到软件实现 在多核处理器与嵌入式系统设计中,核间通信(IPC)是实现计算资源协同工作的核心技术。其原理基于共享内存、硬件邮箱与中断等底层硬件机制,通过构建结构化的消息传递通道,实现核间高效、可靠的数据交换。该技术的核心价值在于打破多核间的壁垒,将分散的计算单元整合为有机整体,从而显著提升系统整体性能与响应能力。在工程实践中,IPC广泛应用于智能座舱、边缘AI网关、实时控制系统等场景,用于处理如仪表显示、AI推理、实时控制等复杂任务。本文聚焦于基于共享内存与VRING的消息队列实现,深入剖析缓存一致性、内存屏障等关键问题 阅读详情

相关推荐

UVM验证中,为什么我的pack_bytes()返回长度是0?手把手教你排查自定义do_pack函数

本文深入解析UVM验证中pack_bytes()返回长度为0的常见原因及系统排查方法。从UVM打包机制原理出发,详细列举了super.do_pack()缺失、field automation冲突等典型问题,并提供动态数组处理、位宽计算等进阶调试技巧,帮助开发者快速定位和解决自定义do_pack函数问题。

weixin_42523693的博客 127

2024 暑假友谊赛-热身2

n面镜子,每一面都有p/100的概率回答漂亮,回答不漂亮就得从头再来,一直到最后一面镜子为漂亮时就停止,求多少天可以到最后一面镜子的期望。也就wa了六次吧,我真是听取wa声一片,而且一直只有几个点不过,后来把范围开大忽然就过了,题目给的范围太草率了吧。每个红箱中有r个红球,绿箱中有g个绿球,蓝箱中有b个蓝球,求如何取箱子最终得到n个球。给出N,求解4/N=1/h+1/n+1/w,输出满足条件的一组h,n,w。给定n,求满足条件x的总和,要求n除以x与n模x的值相等。其实就是个二重循环,数字开大即可。

FS_tar的博客 429

CSP-J/S复赛文件组织与freopen读写全攻略,避免爆零

在信息学竞赛的上机考试中,代码能力固然重要,但文件组织与输入输出重定向往往是决定成败的关键细节。许多选手习惯在线评测环境,对本地文件命名、目录层级和读写方式缺乏系统认知,导致算法正确却因文件名拼写错误或freopen使用不当而遗憾失分。理解评测系统的工作原理,掌握从建立准考证号目录到规范命名源文件,再到使用freopen进行文件流重定向的标准流程,是每位参赛者的必备技能。这种工程化习惯不仅适用于CSP-J/S复赛,也是未来参加NOI等更高水平竞赛的基础。本文从文件组织的底层逻辑出发,结合实战案例,系统讲解考

weixin_32466193的博客 594

2024 暑假友谊赛-热身1 ABC题解

据题知,10x10矩阵相当于一个有向图的邻接矩阵,故考虑用Dijkstra算法求得每点到1点的最短路,最终答案即为 下方HxW矩阵中所有非1与-1点到1点最短路大小乘该点数量 之和 ,在这里用一个数组来存每个点的数目。

qq_39804992的博客 441

用RK3588+FPGA搞定Cameralink高速相机?这份保姆级硬件选型与接口配置指南请收好

本文详细介绍了如何利用RK3588与FPGA构建Cameralink高速相机系统,涵盖硬件选型、接口配置及性能优化等关键步骤。通过异构计算架构和精准的带宽分配,实现工业视觉检测和科研成像领域的高效解决方案,特别适合需要实时处理的复杂应用场景。

weixin_30493401的博客 642

[WeChatMsg]导出csv格式微信聊天记录的手把手教程

手把手教大家如何导出自己的聊天记录得到csv文件,即使是电脑小白也可以轻松学会o(* ̄▽ ̄*)ブ

weixin_51094633的博客 1万+

SMU Summer 2024 Contest Round 6 ABC题解

题意:给一个由数字组成的字符串,可在其中加任意个‘+’ 求所有情况之和思路:二进制枚举,有s个数字就有2^(s-1)种情况。

qq_39804992的博客 348

LeGO-LOAM相对LOAM的改进---地面分离的方法-算法原理+代码讲解

实际上此种地⾯分离算法有⼀些简单,我们可以结合激光雷达安装⾼度等其他先验信息进⾏优化,避免将桌子这些当作地面点。LeGO-LOAM中前端改进中很重要的⼀点就是充分利⽤了地⾯点,那⾸先⾃然是提取对地⾯点的提取。理想情况下, 应该接近0,考虑到⼀⽅⾯激光雷达安装也⽆法做到绝对⽔平,另⼀⽅⾯,地⾯也不是绝。对⽔平,因此,这个⾓度会略微⼤于0,考虑到作者实际在草坪之类的场景下运动,因此这个值被设置成。如上图,相邻的两个扫描线束的同⼀列打在地⾯上如AB点所⽰,他们的垂直⾼度差。,计算垂直⾼度差和⽔平⾼度差的⾓度。..

zysss_的博客 775

第二周题解

题目大意: 给出A,B,C三个数组,看有多少对(i,j)满足思路:先标记A中出现的数,然后在B中找到有多少个位置的数在A中出现过,因为i和j没有大小限制,所以答案就是 如果C中有B与A相等的数的下标 ans就加上 A中某个数的个数题目大意: 给出一个由.和#组成的图形, 现在要求删掉一些行或列,看有多少种操作能使 # 剩下k个思路:二进制枚举,先选择行再选择列,然后计算去掉标记行和列的#剩下多少个#,满足条件则ans++题目大意:对于一个正整数X,让f(X)表示X的正约数的个数。

2301_80010279的博客 1968

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4137

2.4 提示词优化

我们在使用大模型的时候,同一任务使用不同表述的提示词,可能得到差异巨大的结果,因为模型的性能高度依赖输入提示词的质量。我们可以通过提示词优化来更高效地获取理想输出。

从0到1,突破自己 1010

WEEK 1 DAY 4

一看到绝对值,就应该想到数轴上点之间的距离,这道题虽然给b加上了i,但只要把式子拆开,一开始就把每个Ai减去i就行了。然后可以证明(或者学过)一个点到其他点距离和最短应该是这些点坐标集合的中位数,给定一个代价矩阵C,在给定一个矩阵a,要求将此矩阵a中的所有元素都变为1,将i变成j,代价是c[i][j];思路:a[i]-i当做新的a[i],用中位数定理,一个点到n个点的距离和最小是他们的中位数。

2301_81224780的博客 355

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

暑期集训补题(第一周)

大致题意:摇一个骰子,骰子上的数字从1-n,然后抛掷一枚硬币,正面朝上分数翻倍,反面则清零,如果分数小于K,继续抛掷硬币,直到分数大于K,求分数能大于K的概率。本题可以记录每种颜色中的最大值,如果当前数字大于这个最大值,就可以涂上相同颜色,并更新最大值,否则涂上另一个颜色。大致题意:给定一个数组A,现在能进行M次操作,选择将Bi个A数组中的数修改为Ci,求修改后数组A中元素的最大和。大致题意:给定一个数组,将数字涂上各种颜色,对每种颜色的数字,要求i

2301_80010279的博客 488

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 242

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 391

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 339

跟我学c++中级篇—类型定义的方式

本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。

fpcc的专栏 70

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 347

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 304
上一篇: SMU Summer 2024 Contest Round 3
下一篇: 2024 暑假友谊赛-热身2
FS_tar
博客等级 码龄3年 534粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值