MemSQL Start[c]UP 2.0 - Round 2

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上) Matlab+Yalmip两阶段鲁棒优化通用编程指南(上篇),内容包括: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题,并使用C&CG算法进行迭代求解。 阅读详情

反正晚上睡不着,熬到1点开始做比赛,6个题目只做了2个题目,而且手速还比较慢,待提升空间还很大呢。

A题:给定两个0,1串(len<=100000), 但是不是普通的二进制串,而是q进制串,q = (√5 + 1)/2,比较这两个串的大小。

分析:q的长度很大,即使用大数似乎也不怎么合理,其实我写了半天大数,用最大长度数据测试发现根本出不了结果,也许我写的太挫了,也学时间就耗在上面了。

最终只能另想方法,而且题目中也说明了q^2 = q+1,所以很容易想到利用这个来做这个题, 观察到对于一个串中连续2个1,可以转化为高位的1个1,而且大小不变。这个题目比较大小的难点在于,会存在100 和011相等的情况,也就是不能通过一步步比较最高位来判断大小,低位也会影响。所以关键在于如何消除这种影响,我想到的方法就是从低位开始将连续2个1消去,变成高位1,如00110变成01000就好了,但是有一个问题就是遇到这种情况,001110,不止2个1连着,这样如果将最低2个1消除,会使得高位有2个1,001(2)000,这事就应该将连续一段最后两个1消除。这样做了一次之后还不够,需要反过来在做一次,比如这种情况,01111100,第一遍之后变成10011100,反过来遇到连续2个1,则变成高位,第二遍变成10100100,至于为什么这样做,因为第一遍之后会给后面的连续的1空出至少2个空间,这样第二遍的时候就不会有高位2个1的情况。

具体实现用到了bitset,只是因为最近学到了它,想熟练一下只用。

代码:

 1 //Template updates date: 20140718
 2 #include <bits/stdc++.h>
 3 #define in freopen("solve_in.txt", "r", stdin);
 4 using namespace std;
 5 
 6 const int maxn = 100000 + 100;
 7 bitset<maxn> a, b;
 8 void solve(bitset<maxn> &x) {
 9    for(int i = 0; i < maxn - 10; i++) {
10         if(x[i] && x[i+1] && !x[i+2]) {
11             x[i] = x[i+1] =0;
12             x[i+2] = 1;
13             i++;
14         }
15     }
16     for(int i = maxn-11; i >= 0; i--) {
17         if(x[i] && x[i+1]) {
18             x[i+2] = 1;
19             x[i] = x[i+1] = 0;
20         }
21     }
22 }
23 int main() {
24 
25     cin>>a>>b;
26     solve(a);
27     solve(b);
28     for(int i = maxn-11; i >= 0; i--){
29         if(a[i] > b[i]){
30                 puts(">");
31             return 0;
32         }
33         else if(a[i] < b[i]){
34             puts("<");
35             return 0;
36         }
37     }
38     puts("=");
39     return 0;
40 }
View Code

B题:有2个服务器,每个服务器上分别存储则会2个表,分别有m,n行,其中每个服务器会有很多分区,第一个服务器上第i个分区存储着ai行,第二个服务器第i个分区存储着bi行。

每次操作可以将任何分区上的行复制到其他任何分区,且花费为复制过去的行的数目。求最少的花费,使得对于第1个服务器上表的每行和第2个服务器上的表每个行都至少同时出现在一个分区上。

分析:

先对a[i], b[i]排序,suma[i]表示第一个服务器上前i个分区的行之和,sumb[i]类似。

问题可以这样考虑,第一个服务器上行最终状态是分成了x堆,第二个服务器上行移动到这些堆里面,这里花费为x*sumb[n],第一个服务器的花费应当是,a[i]中最大的x个作为不动分区,其他分区移动到这x个堆上面,花费为suma[x-1],枚举x,去最小值。

同理,可对第二个服务器作为x个堆算出最优值。

代码:

 1 //Template updates date: 20140718
 2 #include <bits/stdc++.h>
 3 
 4 #define  in  freopen("solve_in.txt", "r", stdin);
 5 using namespace std;
 6 const int maxn = 100000 + 100;
 7 double a[maxn], b[maxn], sum1[maxn], sum2[maxn];
 8 
 9 int main() {
10 
11     int n, m;
12     cin>>m>>n;
13     double ans = 1e25;
14     for(int i = 1; i <= m; i++) {
15         scanf("%lf", &a[i]);
16         sum1[i] = sum1[i-1]+a[i];
17     }
18     for(int i = 1; i <= n; i++) {
19         scanf("%lf", b+i);
20         sum2[i] = sum2[i-1]+b[i];
21     }
22     sort(a+1, a+m+1);
23     sort(b+1, b+n+1);
24     for(int i = 1; i <= m; i++) {
25         sum1[i] = sum1[i-1]+a[i];
26     }
27     for(int i = 1; i <= n; i++) {
28         sum2[i] = sum2[i-1]+b[i];
29     }
30     for(int i = 1; i <= m; i++) {
31         double tmp = sum2[n]*i+sum1[m-i];
32         ans = min(ans, tmp);
33     }
34     for(int i = 1; i <= n; i++) {
35         double tmp = sum1[m]*i+sum2[n-i];
36         ans = min(ans, tmp);
37     }
38     printf("%.0f\n", ans);
39     return 0;
40 }
View Code

C题:有n支选票,投给ai,如果要这个人把票投给自己,那么需要花费bi,自己的标号为0。求最少的花费,使得自己选票比选票数目最多的那个人还要多。

分析:研究了半天别人代码,发现大抵方法是这样的:首先统计每个人得到的票数,及花费。然后将每个人票花费从小到大排序,统计出每个人的票数排序。

然后就是枚举我需要得到的票数i了,每次从票数比我多的人中减去一票,如果没有达到i,那么才弄个剩下的票数中选出花费最小的一些票。

更新剩下的票数,并选出最小的一些个时用到了树状数组,看了@JayYe的代码,自己仿写了一遍,我不会这一题啊。自己看了还不是很理解~~GG

另外, 好像还可以用三分?

树状数组实现代码:

值得学习的是, 里面查询最小k个的花费时的函数,二进制位从高到低枚举,每次cnt + num[res] < k ,则说明该高位应该加进去。

  1 #include <bits/stdc++.h>
  2 #define in freopen("solve_in.txt", "r", stdin);
  3 #define lson rt<<1, l, m
  4 #define rson rt<<1|1, m+1, r
  5 #define lowbit(x) ((x)&(-(x)))
  6 using namespace std;
  7 const int maxn = 100000+10;
  8 const int maxm = 10000+10;
  9 
 10 map<int, multiset<int> > mps;
 11 typedef map<int, multiset<int> > :: iterator it;
 12 
 13 int n;
 14 int x[maxn], y[maxn], cost[maxn], pos[maxm], val[maxm], num[maxm];
 15 int sz[maxn], r[maxn];
 16 int cnt, tot;
 17 bool cmp(int a, int b) {
 18     return sz[a] > sz[b];
 19 }
 20 void update(int x, int v) {
 21     int tmp = cost[x];
 22     while(x < maxm) {
 23         num[x] += v;
 24         val[x] += v*tmp;
 25         x += lowbit(x);
 26     }
 27 }
 28 int query1(int x) {
 29     int res = 0;
 30     while(x > 0) {
 31         res += num[x];
 32         x -= lowbit(x);
 33     }
 34     return res;
 35 }
 36 int query2(int x) {
 37     int res = 0;
 38     while(x > 0) {
 39         res += val[x];
 40         x -= lowbit(x);
 41     }
 42     return res;
 43 }
 44 int findup(int x) {
 45     int res = 0;
 46     int tmp = 0;
 47     for(int i = 15; i >= 0; i--) {
 48         res += (1<<i);
 49         if(res >= tot || tmp + num[res] >= x)
 50             res -= (1<<i);
 51         else tmp += num[res];
 52     }
 53     return res + 1;
 54 }
 55 #define bug puts(">>>>>>>>>>>><<<<<");
 56 int main() {
 57     
 58     cin>>n;
 59     for(int i = 0; i < n; i++) {
 60         scanf("%d%d", x+i, y+i);
 61         if(x[i])
 62             mps[x[i]].insert(y[i]);
 63     }
 64     for(int i = 0; i < n; i++) {
 65         cost[++tot] = y[i];
 66     }
 67     sort(cost+1, cost+tot+1);
 68     tot = unique(cost+1, cost+tot+1)-cost;
 69     for(int i = 1; i < tot; i++) {
 70         pos[cost[i]] = i;
 71     }
 72     for(int i = 0; i < n; i++) {
 73         update(pos[y[i]], 1);
 74     }
 75     for(it s = mps.begin(); s != mps.end(); s++) {
 76         r[cnt++] = s->first;
 77         sz[s->first] = (s->second).size();
 78     }
 79     sort(r, r+cnt, cmp);
 80     int j = 0;
 81     int nn = 0, ans = 0x7f0f0f0f, ccost = 0;
 82     for(int i = n; i >= 1; i--) {
 83         while(j < cnt && sz[r[j]] >= i) j++;
 84         for(int k = 0; k < j; k++) {
 85             nn++;
 86             int tmp = *mps[r[k]].begin();
 87             ccost += tmp;
 88             mps[r[k]].erase(mps[r[k]].begin());
 89             update(pos[tmp], -1);
 90         }
 91         int cc = ccost;
 92         int kk = max(i-nn, 0);
 93         if(kk > 0) {
 94             int p = findup(kk);
 95             int t1 = query2(p-1);
 96             cc += t1 + (kk-query1(p-1))*cost[p];
 97         }
 98         ans = min(ans, cc);
 99     }
100     printf("%d\n", ans);
101     return 0;
102 }
View Code
【论文详解】AlphaGenome——Sequence-to-Multimodal-Genome-Track **AlphaGenome** 是由 **Google DeepMind** 于 2025 年 6 月发布的突破性 AI 模型,专门用于预测非编码区遗传变异的功能效应。该模型采用受 **U-Net** 启发的卷积架构结合 **Transformer** 模块,创新性地解决了传统模型在输入序列长度与预测分辨率之间的核心矛盾——能够在 **1M 碱基对的超长上下文** 下实现 **单核苷酸分辨率** 的精准预测。 阅读详情

相关推荐

微信支付V2,jsapi支付拉起收银台报错:调用支付JSAPI缺少参数:total_fee

拉起收银台报错

m0_54355172的博客 3873

MemSQL Start[c]UP 2.0 - Round 2 A

题意:黄金进制。就是说每逢黄金分割率(0.618...)进一,这样的进制不方便像通常na

A Cube Master 585

从零到一:RV1126与IMX415的硬件交响曲——深入解析Linux IPC摄像头的硬件调试艺术

本文深入解析了RV1126与IMX415组合的Linux IPC摄像头硬件调试技术,涵盖硬件接口检查、设备树配置、驱动加载验证及ISP调优等关键步骤。通过详细的操作指南和常见问题解决方案,帮助开发者快速掌握摄像头调试技巧,提升开发效率。

weixin_29161785的博客 978

MemSQL Start[c]UP 2.0 - Round 1 C. Magic Trick

首先,我们先假设有抽出的牌样式为A

Mr.Phoebe的专栏 863

新手必看:如何用Python模拟电动助力转向系统(EPS)的传感器信号处理

本文详细介绍了如何使用Python模拟电动助力转向系统(EPS)的传感器信号处理流程,包括转向力矩、转向角度和车速信号的生成与滤波处理。通过实战代码示例,帮助开发者理解ECU如何计算助力扭矩,并提供了可视化分析和性能优化建议,适合汽车电子系统开发新手学习。

weixin_28327051的博客 354

MiniMax H3本地部署实战:ComfyUI整合包安装与提速插件验证指南

在AIGC工具链快速演进的当下,本地部署内容生成模型成为许多创作者和开发者的关注焦点。本地部署意味着数据不出本机、可按需定制工作流,还能规避云端排队与外部依赖,其核心价值在于为内容生产提供可控、私密且可编程的生成环境。ComfyUI作为模块化节点式AI绘画工具,凭借灵活的工作流编排和API接口能力,成为承载这类模型的热门平台。MiniMax H3作为支持文本、参考图等多种输入的内容生成模型,与ComfyUI结合后,既适合个人进行概念验证,也能用于团队私有化流程搭建。实际落地过程中,中文整合包显著降低了环境配

weixin_29042035的博客 294

MemSQL Start[c]UP 2.0 - Round 2 - Online Round A,B,C

MemSQL Start[c]UP 2.0 - Round 2 - Online Round 题目链接 不得不说这场真心不好打啊... A:黄金分割进制数,满足一个性质,对于第i位xi=xi−1+xi−2,这样一来就可以把所有位推到前两位去比较大小,不过单单这样直接搞果断爆longlong无限WA8,最后发现在推的过程中,有一位上面差值大于1,就可以直接判断了 B:不得不吐

Remilia's 1398

【S32K】S32K144入门笔记(4) Lin (Lin stack组件) 驱动超声波雷达实例

0. 引言 Lin这块是我一直没弄懂的部分。很多东西一知半解,当时感觉是硬凑了答案出来。 果然过标的时候出了问题,几个小伙伴帮忙一起刷夜也没搞定,好在标还是顺利过了,不然罪过大了。 之前做lin这块一直用的是linStack组件,这部分包含了协议栈部分,需要对lin的协议比较清楚和理解才好配置。 尤其是,图形界面配置完成后会生成一个ldf文件,这个文件很重要,所有的代码都是基于这个文件生成的,但是这个文件我确认没找到什么介绍资料,所以很多配置都是一点一点凑出来的,再实际验证的。 抓住这次写文档的机会,把当时

YoYo的桃子树 1万+

MemSQL Start[c]UP 2.0 - Round 1 .A

A. Eevee time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are solving the crossword problem K from IPSC 2

在风雨中奔跑 708

基于FPGA的工业相机项目大赏1——cmos线阵相机

●CMOS CL0402 作为图像传感芯片,曝光后产生一定格式的图像数据;●FPGA ZYNQ7020 作为主控芯片负责cmos驱动控制、图像像素的采集、cmos寄存器的配置、cameralink协议的实现、上位机串口通信的实现;●Cameralink端子实现图像数据的高速串行发送,将数据传送至采集卡PC端。系统工作流程如下: FPGA 上电加载配置程序,计算机通过异步串口向 FPGA 发送控制信息,FPGA对接收的控制信息进行分析判断。

weixin_41895751的博客 6400

基于STM32的简易电压、频率、占空比测量仪

任务详解:我们需要实现三个功能: 第一个是测频率的功能,输入信号为频率为1kHz~10kHz的三种波形(方波、三角波、正弦波),这也是我们最常见的三种波形。幅度是不需要测量的,所以先不关心幅度。 第二个是电压报警功能,当输入信号的幅度超过15V时,我们需要报警(这里我用了一个红色LED当报警器,有条件的还可以加个蜂鸣器)并且把此时的信号幅度显示在OLED屏幕上。 第三个是通信方式的要求,需要有串口通信功能。 第四个是计算占空比的任务,这个任务的输入是幅度为1V~10V、频率为20Hz ~1kHz的方波,需要

weixin_43469377的博客 7251

MemSQL Start[c]UP 2.0 - Round 2 - Online Round

今天凌晨的cf题目都没看明白

xlp的acm专栏 663

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

天天酷科研的博客 1114

MemSQL Start[c]UP 2.0 - Round 1

搞了好久才把大部分题目题解看完了,真是太弱了。 A题简单暴力题一个一个匹配,对应位置字母要么相同,要么是'.'. B题给定一个矩阵,左下角(0,0),右上角(n, m),取4个不同的点连成一段折线,要有最长的折线长度。 排除n == 0 和m == 0 ,剩下的情况中总共由4中情况: 枚举一下就可以了 1. (0,0)->(n,m)->(0, m)->(n, 0) 2. (0,0)->

rootial的专栏 554

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MemSQL Start[c]UP 2.0 - Round 2 - Online Round D. Bingo!

D. Bingo! 题解见此:https://blog.csdn.net/v5zsq/article/details/79010405 另: 由于幂次太高,因此取对数后做处理 c++中 log(x) 表示的是 ln(x) 最后再取e指数 exp(x) #include<bits/stdc++.h> using namespace std; typedef long d...

nflsjxc的博客 313

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MemSQL Start[c]UP 2.0 Round 2

今天凌晨 1:00 ~ 4:00 战了一下这场的 CF,过程大致如下: A 上来 WA 一发,改改过了;B 上来 WA 一发,改改过了;C 上来 WA 一发,改改过了;D 想想想然后不会。最后 Rank53,感觉还不错! A、题目已经给了 q^2 = q + 1 了,然后就搞就行了 B、贪心 C、我比赛的做法是从 n 个票往下枚举,维护一个大根堆,每次扔出去

463

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include #include #include #include #include #include #include using namespace std; typedef long long LL

代码艺术的道与术 889

CF MemSQL Start[c]UP 2.0 - Round 1 D

D. Washer, Dryer, Folder time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You have k pieces of laundry, each

勿忘初衷 1750

MemSQL Start[c]UP 2.0 - Round 2 - Online Round 题解

题解: A. Golden System time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Piegirl got bored with binary, dec

u010084308的专栏 1185

Codeforces MemSQL Start[c]UP 2.0 - Round 1

http://codeforces.com/contest/452 这场上午花了一会做了下,AD 是 1Y,还算比较简单,B 因为特判一维的情况写错了挂了一发。。话说回来这种情况样例就有啊为什么不看看(。。 。C 因为没判断 n, m 的大小的关系 Fail on 8 了(比赛的时候就是妥妥的过 pretest 然后 FST),E 想半天不会,F 想半天不会 = =。 A、水

467

MemSQL Start[c]UP 2.0 - Round 1E. Three strings

题意:给3个字符串,问从1到min(l1,l2,l3)的长度的子串,找到从该位置长度为l,三个子串相同的三元组的个数 题解:把3个子串用分隔符串起来.然后分开统计每个节点在三个串中出现次数.最后乘起来就是该节点表示的三元组个数,然后l[fa[i]]+1到l[i]有贡献,对l差分一下就好了 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#...

weixin_30548917的博客 143

codeforces MemSQL Start[c]UP 2.0 - Round 1 A. Eevee

又一次与暴涨rating失之交臂 忘了判断字符串的cha

小华在努力~ 576

MemSQL Start[c]UP 2.0 - Round 2 - Online Round(数学:高精度)

一道很蛋疼的题,根据

小华在努力~ 439

MemSQL Start[c]UP 2.0 - Round 1 D. Washer, Dryer, FoldercO

Codeforces

Mr.Phoebe的专栏 964

[Hash] Codeforces 452F MemSQL Start[c]UP 2.0 - Round 1 F. Permutation

从左往右扫 对于当前的某个aia_i 我们只判断ai+ka_i+k和ai−ka_i-k是不是都出现过或都没出现过 要是只有一个出现 那么肯定另一个在后面 不合法 对于出现情况我们hash下 可以用线段树或树状数组维护 为什么我这么长#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typede

雯舞 858

Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)

A 签到 B 签到 C 题意 现有两种pizza, 每张pizza可分为s块,有n个人,分别给出n的人需要的块数,吃第一种1块获得的价值,吃第二种1块获得的价值,问在需要最少的pizza的数量下的可以获得最大价值为多少 分析 关键点:每个人都取最优,两种pizza余下的不会超过两张pizza 故可以将所有取最优,如果余下的可以组成一张,分别考虑第一种转为...

auiayo82822的博客 162
上一篇: NEERC 2010, Eastern subregional contest
下一篇: FFT初步学习小结
rootial
博客等级 码龄15年 2粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值