GCJ2019 Round1B 题解

别再为格式发愁:safetensors转GGUF的三种高效方法及Ollama集成对比 本文详细介绍了将safetensors格式转换为GGUF格式的三种高效方法,包括llama.cpp原生转换、GGUF官方工具链和Transformers中转方案,并对比了它们在Ollama集成中的表现。文章还提供了实际项目中的踩坑经验和性能调优建议,帮助开发者快速掌握模型转换技术。 阅读详情

A.Manhattan Crepe Cart
维护两个轴的到达数,其实就是区间加,做一个差分前缀和就可以了,复杂度O(p+q)O(p+q)O(p+q)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100050;
int x[maxn],y[maxn];
int dx[maxn],dy[maxn];
void init(int q){
    for(int i=0;i<=q;i++){
        x[i]=y[i]=0;
        dx[i]=dy[i]=0;
    }
}
void addx(int l,int r){dx[l]++;dx[r]--;}
void addy(int l,int r){dy[l]++;dy[r]--;}
char str[3];
int main(){
    int t;
    scanf("%d",&t);
    for(int cas=1;cas<=t;cas++){
        int p,q;
        scanf("%d%d",&p,&q);
        init(q);
        for(int i=1;i<=p;i++){
            int px,py;
            scanf("%d%d%s",&px,&py,str);
            if(str[0]=='W')addx(0,px);
            if(str[0]=='E')addx(px+1,q+1);
            if(str[0]=='S')addy(0,py);
            if(str[0]=='N')addy(py+1,q+1);
        }
        x[0]=dx[0];
        y[0]=dy[0];
        for(int i=1;i<=q;i++){
            x[i]=x[i-1]+dx[i];
            y[i]=y[i-1]+dy[i];
        }
        int mxx=0,mxy=0;
        int posx=0,posy=0;
        for(int i=0;i<=q;i++){
            if(x[i]>mxx){
                mxx=x[i];
                posx=i;
            }
            if(y[i]>mxy){
                mxy=y[i];
                posy=i;
            }
        }
        printf("Case #%d: %d %d\n",cas,posx,posy);
    }
    return 0;
}

B.Draupnir
C写的太慢,没看,待补
C.Fair Fight
这里假设两个人叫小CCC和小DDD,假设小CCC选中了iii兵器,i左边第一个熟练度比iii高的编号设为lilili,同理右边第一个设为ririri,那么我们给出的区间一定在[li,ri][li,ri][li,ri]内部,但是这样会有重复的情况,因此稍微改变一下lilili的定义,改为满足C[i]≤C[li]C[i] \leq C[li]C[i]≤C[li],这样就完成了去重,线性找这个东西可以用单调栈搞一下,这里不赘述。
接下来问题就转化成了,找到DDD序列中距离iii左边和右边的最近的一个大于等于下限的区间,以及最远的一个小于等于上限的区间,因为从iii点向左或向右扩展,区间最大值是单调的,因此这个地方可以用二分+rmq的手段解决,我偷懒直接写了线段树维护区间最大值,所以我的写法是两个log,假设求出来为
ll,lr和rl,rrll,lr 和 rl,rrll,lr和rl,rr
那么答案分类讨论一下就出来了,具体看代码,可以先判掉D[i]&gt;C[i]+kD[i]&gt;C[i]+kD[i]>C[i]+k的情况以简化问题
分类讨论可以看这个图yy一下
瞎逼随手画的图不要当真,看代码里就几行很好理解的

#include<bits/stdc++.h>
#define ok (l==r)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)>>1
#define lson ls,l,m
#define rson rs,m+1,r
using namespace std;
typedef long long LL;
const int maxn=100010;
int c[maxn];
int l[maxn];
int r[maxn];
int d[maxn];
stack<int>mst;
int mxd[maxn<<2];
inline void pushup(int rt){
    mxd[rt]=max(mxd[ls],mxd[rs]);
}
void build(int rt,int l,int r){
    if(ok){
        mxd[rt]=d[l];
        return;
    }
    int m=mid;
    build(lson);
    build(rson);
    pushup(rt);
}
int query(int rt,int l,int r,int L,int R){
    if(l>=L&&r<=R)return mxd[rt];
    int m=mid;
    int ans=-1;
    if(L<=m)ans=max(ans,query(lson,L,R));
    if(R>m)ans=max(ans,query(rson,L,R));
    return ans;
}
int main(){
    int t,n,k;
    scanf("%d",&t);
    for(int cas=1;cas<=t;cas++){
        scanf("%d%d",&n,&k);
        c[0]=c[n+1]=1e6;
        for(int i=1;i<=n;i++)scanf("%d",&c[i]);
        for(int i=1;i<=n;i++)scanf("%d",&d[i]);
        while(!mst.empty()){mst.pop();}mst.push(0);
        for(int i=1;i<=n;i++){
            while((!mst.empty())&&(c[mst.top()]<c[i]))mst.pop();
            l[i]=mst.top()+1;
            mst.push(i);
        }
        while(!mst.empty()){mst.pop();}mst.push(n+1);
        for(int i=n;i>=1;i--){
            while((!mst.empty())&&(c[mst.top()]<=c[i]))mst.pop();
            r[i]=mst.top()-1;
            mst.push(i);
        }
        build(1,1,n);
        LL tot=0;
        for(int i=1;i<=n;i++){
            if(c[i]+k<d[i])continue;
            int dl,dr,ans;
            int cnt=0;
            LL anslL,anslR,ansrL,ansrR;
            dl=l[i];dr=i;
            ans=i+1;
            while(dl<=dr){
                int m=(dl+dr)>>1;
                int mx=query(1,1,n,m,i);
                if(mx<=c[i]+k){
                    ans=m;
                    dr=m-1;
                }
                else if(mx>c[i]+k){
                    dl=m+1;
                }
                else {
                    dr=m-1;
                }
            }
            anslL=ans;
//puts("1");
            dl=l[i];dr=i;
            ans=anslL-1;
            while(dl<=dr){
                int m=(dl+dr)>>1;
                int mx=query(1,1,n,m,i);
                if(mx>=c[i]-k){
                    ans=m;
                    dl=m+1;
                }
                else if(mx>c[i]+k){
                    dl=m+1;
                }
                else {
                    dr=m-1;
                }
            }
            anslR=ans;
//puts("2");
            dl=i;dr=r[i];
            ans=i-1;
            while(dl<=dr){
                int m=(dl+dr)>>1;
                int mx=query(1,1,n,i,m);
                if(mx<=c[i]+k){
                    ans=m;
                    dl=m+1;
                }
                else if(mx>c[i]+k){
                    dr=m-1;
                }
                else {
                    dl=m+1;
                }
            }
            ansrR=ans;
//puts("3");
            dl=i;dr=r[i];
            ans=ansrR+1;
            while(dl<=dr){
                int m=(dl+dr)>>1;
                int mx=query(1,1,n,i,m);
                if(mx>=c[i]-k){
                    ans=m;
                    dr=m-1;
                }
                else if(mx>c[i]+k){
                    dr=m-1;
                }
                else {
                    dl=m+1;
                }
            }
            ansrL=ans;
//puts("4");
            LL L=i-anslL+1;
            LL R=ansrR-i+1;
            LL PL=(anslR-anslL+1);
            LL PR=(ansrR-ansrL+1);
//            printf("%d %d %d %lld %lld %lld %lld %lld %lld\n",i,l[i],r[i],L,R,anslL,anslR,ansrL,ansrR);
            if(PL>0||PR>0){
                if(PL>0){
                    if(PR>0)tot+=(PL*R+PR*L-PL*PR);
                    else tot+=PL*R;
                }
                else if(PR>0)tot+=PR*L;
            }
        }
        printf("Case #%d: %lld\n",cas,tot);
    }
    return 0;
}

汽车UDS诊断详解及Vector相关工具链使用说明——1.1 应用层协议整体介绍 本文我们先从整体的维度来介绍一下应用层协议,每个UDS服务都遵循本文中的协议。 一、SI(Service ID) SI是UDS指令的第一个字节,我们第一篇文章中提到的10等服务就是指这个服务的SI=0x10,它是服务的标识,每个服务的SI都是唯一的。 ... 阅读详情

相关推荐

合成孔径雷达(SAR)的常见工作模式

随着星载SAR技术研究的深入发展,单一的条带模式已经无法满足当今时代的需求,因此许多新的工作模式相继被提出。这些新模式在分辨率和测绘宽度等方面都有所提高,接下来将简要介绍几种常用的工作模式。

m0_51390495的博客 2314

埃及分数(贪心算法)

link. 思路为借鉴上个链接,代码为自己所写。 一、问题描述 把一个真分数表示成最少的埃及分数之和。 埃及分数即分子为1的分数。 二、问题分析 1、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。 2、具体步骤如下 步骤一 假设真分数N/M的分子为N,分母为M,则有下式成立 M = K * N + Z,其中Z必小于N 两边同时除以分子N后,可知 M/N = K + Z/N < K + 1 所以,必有下式成立 N/M > 1/K+1 所以,小于真分数N/M的最大埃及分数为1

sssupersjy的博客 9030

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

曾用名:极客柒 1851

埃及分数

埃及分数:埃及分数是指分子是1的分数,也叫单位分数。古代埃及人在进行分数运算时。只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。 题意:给你一个分数,要求输出最优(式子尽量短,每一个分数尽量大)的一组由埃及数组成的解 思路一:暴力,枚举1/2到1/n的所有情况,不过这样可能耗时比较大,而且可能存在乘法溢出的情况。 思路二:公式:例:a/b,q=b/a,r=b%a-->

Never__give__up的博客 6890

【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1629

维纳滤波和卡尔曼滤波

本文的主要内容是维纳滤波和卡尔曼滤波的介绍,包含匹配滤波器、维纳滤波器、维纳预测、卡尔曼滤波等内容。

西岸贤 9519

埃及分数 (迭代深搜 TAT....入门)

描述 在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。对于一个分数a/b,表示方法有很多种,但是哪种最好呢?首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。 如:19/45=1/3 + 1/12 + 1/180 19/45=1/3 + 1/15 + 1/45 19/45=1/3 + 1/18 + 1/30, 19/45=1/4 + 1/6 + 1/180 19/45=

qq_51738428的博客 2467

Python爬虫实战:5分钟搞定Boss直聘数据抓取(附完整代理IP配置)

本文详细介绍了如何使用Python爬虫高效抓取Boss直聘的招聘数据,包括环境配置、反爬策略、数据采集与存储、数据分析等完整流程。通过实战案例,帮助开发者快速掌握招聘市场数据抓取技术,为职业决策提供数据支持。

weixin_30832143的博客 346

贪心算法应用:埃及分数问题详解

贪心算法应用:埃及分数问题详解

专注分享技术、实用优质教程、资源 1862

数控系统(CNC)系列:Hurco VMX42SR_(3).控制系统硬件组成部分

控制箱是CNC系统的核心部分,负责处理所有的控制指令和数据。它通常包含主控板、电源模块、接口板等关键组件。伺服驱动器是CNC系统中的关键组件,负责将主控板发出的控制信号转换为电机所需的驱动电流。它通过闭环控制确保电机的精确运动。电机是CNC系统中的执行机构,负责实现主控板发出的运动指令。常见的电机类型包括步进电机和伺服电机。传感器是CNC系统中的重要组件,用于检测和反馈机床的运行状态。常见的传感器类型包括位置传感器、速度传感器、温度传感器等。电源供应系统为CNC系统的所有组件提供电力。主电源。

2401_87715305的博客 1279

整车电检工艺流程

本文是笔者在从事汽车行业智能制造领域过程,对于整车电检工艺流程的理解与总结。

qq_40664711的博客 1万+

将 1/2024 拆分为 2023 个不同的埃及分数之和

埃及分数拆解,一种有规律、易实现的方法。fortran代码进行精确分数计算,验证。

f90boy的博客 7661

Open Lovable 网站克隆AI工具超详细实战教程(含环境配置、排错与代码修改)

本教程面向有一定计算机基础的新手用户,提供一份全面、深入的 Open Lovable 使用指南。从开发环境搭建、API密钥获取、项目部署到网站克隆、代码下载、本地运行与二次开发,涵盖全流程细节与常见问题解决方案。通过本教程,新手可掌握如何利用AI驱动的Open Lovable工具,将任意目标网站智能复刻为结构清晰、可编辑的现代前端项目(React/Vite),实现快速原型开发与技术学习。

hy行者勇哥的博客 4958

GCJ2019 Round1C 题解

A.Robot Programming Strategy 就是看一下能不能干掉所有人,建个字典树,树上搜一下,如果再某一层有三种不同的情况那这棵子树就无解 #include<bits/stdc++.h> using namespace std; int hsh[27]; char rehsh[3]; struct node{ int c[3]; int su; }tre...

IDrandom的专栏 395

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GCJ2019 Round1A 题解

A.pylons 小数据暴力,大数据根据ore定理用延长通路法构造解,这里参考了 https://www.cnblogs.com/zhj5chengfeng/p/3233992.html 这篇blog的总结,赛内我犯了sb错误,把下标当数用了当场GG,然后,然后就没了 #include<bits/stdc++.h> using namespace std; struct edge{ ...

IDrandom的专栏 290

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

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

GCJ2019 Qualification Round abc题解

A.Foregone Solution 因为肯定有4,只要把4那位减1出来就行了。。。抱歉我是个傻子,退役太久,智商为负,写了个又麻烦又低效的东西,不想改了贴在这里纪念下sb时刻 #include<bits/stdc++.h> #define mpi(i,j) make_pair(i,j) using namespace std; typedef pair<int,int>...

IDrandom的专栏 325

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

2014 GCJ Round 1C

题目链接:GCJ|Round1C 在浦东图书馆做的比赛, zon

geek7的专栏 960

2014 GCJ Round 1A

目前只会做A 题目链接:

geek7的专栏 1071

Full Binary Tree(GCJ2014 round1A PB)

去年google code jam第一轮的B题,我没有想明白,也没有找到题解。没有办法,就去下载了大神的代码来看看。感觉差距好大,别人用十分钟不到就做出来了。题目的描述如下,我就不写翻译了,题意挺明了的。由于墙的原因,我还是把题目贴下面吧!题目内容 A tree is a connected graph with no cycles.A rooted tree is a tree in which

intheworld 969

GCJ_2011_Round_1_B_Revenge of the Hot Dogs 解题思路

GCJ_2011_Round_1_B_Revenge of the Hot Dogs 解题思路 首先,考虑简单情况,两个人的距离太近,就要走远一点,那么两个人可以同时向相反方向走,那么要走距离X花费时间为X/2,而当一个人静止, 另一个人移动,这样两个人远离X要...

weixin_30566149的博客 110

gcj Round 1- A -B题

输入 E R N v1 v2 ... vn 有n个工作,没做一个消耗一定的能量,但可以得到R个能量(最多为E,多则去除),初始能量是E, 每件工作的收益是 v[i]*u[i], u[i] 做i使用的能量. u[i]>=0, u[i]<=E 解: 如果规定u[i]>=1,那么这个问题就很简单, find the max in V[ ], then use E energ...

weixin_33744141的博客 956

【贪心】GCJ 2012 round1A kingdom rush

GCJ = Google Code Jam,是一种形式比较特殊的比赛,可以下载到测试数据,然后参赛者只需要提交输出文件,至于结果是如何得出来的并不重要,所以理论上说用肉眼去看亲自动笔算也是可以的。。。。 第一次接触,就看了一下往年的题目,round 1的前两题基本上可以招架住,第三题就超出能力所及了。。。。 kingdom rush也蛮简单的,用贪心法就好了,注意rating 2不合适时要选择

BananaTree 1147

【gcj】2013 round 2

解答 ==================================== 题目 ==================================== Problem C. Erdős–Szekeres Given a list X, consisting of the numbers (1, 2, ..., N), an increasing

一地鸡毛 578

打卡信奥刷题(2223)用C++实现信奥 P12948 [GCJ Farewell Round #1] Rainbow Sort

这篇文章介绍了一个卡片排序问题,要求为不同颜色的卡片分配数字并排序颜色。题目给出了输入输出格式和样例解释,并提供了C++代码实现。关键点在于需要满足三个条件:数字非递减、同色同数字、异色异数字。代码通过检查相邻卡片的颜色来判断是否可能满足条件,若不可能则输出"IMPOSSIBLE"。文章还提到后续将继续分享算法题实现和比赛心得,适合编程竞赛爱好者关注。

Loge谈信奥--一个专注于信奥人的博客 1097

GCJ Round 1C 2016 题解

ASenate Evacuation B Slides C Fashion PoliceA.Senate Evacuation#include<bits/stdc++.h> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(

nike0good |Oier&ACMer | 熟能生巧 895

【codejam2019 Round1A】Golf Gophers 题解

题目大意   这是一道交互题。   现在有若干只地鼠,你只知道地鼠数量 ≤M\leq M≤M,你要把这个数量猜出来。   你有 18 个风扇。每天初始,你给每个风扇设定它的叶片数 bib_ibi​(2 到 18 之间,从 0 开始标号),然后都让 0 号叶片指向正下。接着,每只地鼠独立地、等概率地选择一个风扇,把它的叶片往前拨一位(即原来是 jjj 号叶片向下的现在变成 (j+1) mo...

Four's 521
上一篇: POJ1860Currency Exchange(判负环)
下一篇: GCJ2019 Round1C 题解
IDrandom
博客等级 码龄12年 31粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值