春游6.0 | 2019浙江大学校赛及部分题解(E题 G题 J题)

2019 浙江省赛部分题解(The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple) Problem A http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4100 题意: 以连通块中元素个数为权值,建立线段树,维护三个变量,分别是cnt(这样的连通块的数量),sum(连通块的总的点数),pfh(各连通块之间点数的平方和)(注意不是和的平方) cnt代表连通块数量,tot_ret代表当前状态下的图,在不增长连... 阅读详情

下午两点开始比赛 共四个小时

我们是在浙大OJ上做镜像比赛 (不知道为啥比标准时间晚了十分钟……)

感想:

1.要会板子题,但是也要考虑数据和时间限制、空间限制

【比如 A题 队友说这一看就是板子题 二分图匹配啊 然后开始打板子……】

【结果一直超时 一直超内存…… 到比赛结束也没解决 后来问大佬 暴力就过了 TAT】

2.保持头脑清晰

【今天没划水 因为队友没思路 我做的题目简单】

 3.不要依赖固有思维

【比如 J题 队友读完题目后 说找两个合数 10的18次方数据太大 暴力应该不行吧】

【我后来发现这道题目过题人数很多 觉得应该是个水题 而且是通解】

【不按照题目意思去思考 而是把合数变成了某个数的个数 合理推论两次后 得到了我认为的最优通解……】 

4.坚持不懈= = 

【本来是我理解了G题题意 开始敲代码 大白突然说 我来写这题吧(我想前两题都是我做的 那我休息一下……)】

【大白都已经debug完了 然后说她看错样例了 结果还是我来写T^T 弄清楚如何暴力之后 开始敲代码(大白原来的代码都没用……)】 

【第一下WA的时候 感觉可能是等于 0 的情况没有考虑清楚 再交了两发之后发现区间没有判断是否出界 还好来得及555】

【以下是今天我们交题的过程 最后一分钟AC真的很刺激orz】

 

以下是部分题解(今天没划水啊~)

(注:题目中的数学公式没法复制 所以选择了截屏

E题思路:

ai 数组表示他需要的,bi 数组表示他拥有的,而高级的可以转换为低级的(即 在高位可以变成低位),从高级向低级遍历,如果不满足ai < = bi ,就直接break,不满足条件,否则就将 (bi - ai)的部分全部转换为更低级的部分。

代码如下:

#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
#include <string.h>
using namespace std;

long long a[1005], b[1005];
int main()
{
    int t, x;
    scanf("%d", &t);
    for(int i = 0; i < t; i++)
    {
        scanf("%d", &x);
        bool flag = true;
        for(int j = 0; j < x; j++)
        {
            scanf("%lld", &a[j]);
        }
        for(int j = 0; j < x; j++)
        {
            scanf("%lld", &b[j]);
        }
        for(int j = x - 1; j >= 0; j--)
        {
            if(b[j] > a[j])
                b[j - 1] += b[j] - a[j];
            else
            {
                flag = false;
                break;
            }
        }
        if (flag ==true )printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

 

J题 题意:

输入 t 组数据,每组数据有一个 n ,求两个合数 x,y,使得 x + n = y

思路:

最开始想的是 n + n = 2n (当 n 不是质数时)

当 n 为质数时可以另外判断

过了两分钟想到了更优解

n + 2n = 3n (n != 1)

n + 9 = 10 (n = 1)

代码如下

#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
#include <string.h>
using namespace std;

int main()
{
    int t;
    scanf("%d", &t);
    for(int i = 0; i < t; i++)
    {
        long long n;
        scanf("%lld", &n);
        if (n==1)
            printf("9 10\n");
        else
        printf("%lld %lld\n", 2 * n, 3 * n);
    }
    return 0;
}

 (没错 就是这么短hhh)

 

G题题意

一个邮递员去送信,给出 t 组数据,每个数据包含 n 个地点坐标和包里最多能装 k 封信,最后一封信送完可以不回邮局(邮局的坐标为 0 ),问邮递员最少需要走多少路才能把信全部送完。

有点贪心的思想

先把所有的信都送了(不考虑不回邮局),离得远的信可以一起送

比如 样例中 是先送 -1 位置的信 需要 2 步(往返一共 2 步),然后送 3 位置的信 需要 6 步,最后送 -3 -4 -5 位置的信(k=3 所以三封信一起送) 需要 10 步,一共需要 18 步 。

此时再去考虑 最左端和最右端 哪一个位置距离 0 更远 (即 比较绝对值大小 这里的情况是所有位置有正有负)很明显是 5 > 3 所以 18 - 5 = 13 一共需要13步……

所有位置全为正和全为负的情况要分开讨论~

代码如下:

#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
const long long INF = 0x3f3f3f3f;
long long a[100005];

bool cmp(int a, int b)
{
    return a < b;
}
int main()
{
   // freopen("in.txt", "r", stdin);
    int t, n, k;
    scanf("%d", &t);
    for(int i = 0; i < t; i++)
    {
        long long sum = 0;
        int m=0;
        memset(a,INF,sizeof a);
        scanf("%d%d", &n, &k);
        for(int j = 0; j < n; j++)
        {
            scanf("%lld", &a[j]);
        }
        sort(a, a + n, cmp);
        if(a[0] <= 0 && a[n - 1] >= 0)
        {
             m = 0;
            if(a[m + k] < 0 && (m+k)<n)
            {
                while(a[m + k] < 0&& (m+k)<n)
                {
                    sum += a[m] * (-2);
                    m = m + k;
                }
                sum+=a[m]*(-2);        
            }
            else sum += a[m] * (-2);
            m = n - 1;
            if(a[m - k] >0 &&( m-k>=0))
            {
                while(a[m - k] > 0&&( m-k>=0))
                {
                    sum += a[m] * 2;
                    m = m - k;
                }
                sum += a[m]*2;
            }
            else sum += a[m] * 2;
            int maxx = max(abs(a[0]),a[n-1]);
            sum = sum-maxx;
        }
        else if(a[0] >= 0 && a[n - 1] >= 0)
        {
            m = n - 1;
            if(a[m - k] > 0&&( m-k>=0))
            {
                while(a[m - k] > 0&&( m-k>=0))
                {
                    sum += a[m] * 2;
                    m = m - k;
                }
                sum += a[m]*2;
            }
            else sum += a[m] * 2;
            sum = sum-a[n-1];
        }
        else
        {
            m = 0;
            if(a[m + k] < 0&& (m+k)<n)
            {
                while(a[m + k] < 0&& (m+k)<n)
                {
                    sum += a[m] * (-2);
                    m = m + k;
                }
                sum+=a[m]*(-2);       
            }
            else sum += a[m] * (-2);
            sum = sum+a[0];
        }
        printf("%lld\n", sum);
    }
    return 0;
}

 

可能队友Alone会把A题补了 

目前就这样啦~

要为ccpc好好准备了(ง •̀_•́)ง

 

嵌入式工程师成长之路(7)——算法学习 算法大全1、风仲达——算法笔记2、坐在马桶上学算法3、啊哈算法4、深度强化学习实验室。 阅读详情

相关推荐

别再手动折腾了!PICO Unity SDK 一键配置开发环境保姆级教程(含PDC串流调试)

本文详细介绍了PICO Unity SDK的一键配置功能,帮助开发者快速搭建VR开发环境。通过自动化配置流程,大幅减少手动设置时间,提升开发效率。文章还涵盖了PDC串流调试技巧和常见问题解决方案,是PICO VR开发的实用指南。

weixin_30335575的博客 450

春游-PTA

算法,迪杰斯特拉

weixin_61282808的博客 952

用PY32F003F18的PWM互补输出驱动无刷电机,保姆级配置流程(含代码)

本文详细介绍了如何利用PY32F003F18微控制器的TIM1定时器配置PWM互补输出功能来驱动三相无刷电机,涵盖硬件设计、代码实现及六步换相算法。通过保姆级配置流程和实用代码示例,帮助开发者快速掌握无刷电机驱动技术,适用于工业自动化和消费电子等领域。

weixin_26905487的博客 378

PTA 春游

PTA 春游春天阳光灿烂,小宋突然心血来潮想骑自行车去学校外面玩,但是到达目的地的路线不止一条,他想尽快的到达目的地,又能不需要骑太远的路, 你能帮助他吗?

辰辰Ado_I 653

CoppeliaSim(原V-REP)新手上路

CoppeliaSim(原V-REP)是一个机器人仿真平台,里面有很多来自别的公司的机器人模型以及完备的物理引擎,我们可以通过python,c++,matlab等语言控制里面的机器人。,您也可以在官网中Downloads里找您需要的版本,一般只需要下载EDU版本就可以了,我下载的是v4.1.0 windows EDU版本。在版本V4之前,CoppeliaSim叫V-REP,在官网可以下载到之前的V-REP版本。

qq_37051669的博客 4万+

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 243

2019XUPT_ACM校赛总结

好久没有写博客了,上次写博客还是上一学期的事情,感觉最近自己天天被各种琐事缠身,自己本身也有些懈怠,很烦。。。 虽然比赛的结果还可以接受,但感觉有些东西学得太不扎实了。。。 题目 A 给定一个循环括号序列(括号环),可以从任何一个地方断开,给定一个括号环,问是否可以断开成为一个合法的环 我一开始的想法是枚举断开的位置,判断这个序列是否合法 虽然可以过,但是正解如下 判断左右括号的数量,如果相等就...

森世 510

Visio中高效绘制空间坐标系的实用技巧

本文详细介绍了在Visio中从零开始高效绘制精准空间坐标系的实用技巧。文章摒弃了现成形状的局限,重点讲解了如何利用直线、箭头和文本框等基础工具,结合网格设置、绘图比例调整和图层管理,构建完全可控的三维坐标系。通过分步指南,帮助用户掌握刻度添加、标注对齐及模板创建等高级方法,从而在科研绘图与工程制图中实现专业级的视觉效果。

e3f4g5的博客 558

【C++】牛客——春游

首先我们可以计算双人船和三人船中每个玩家的花费,我们要在尽可能的情况下选择单价少的船优先安排。如果剩下一个人,那么就考虑是给他新添一艘船或者拿掉一个a,和之前2个人一起去坐3人船。接下来 T 行每行给出三个正整数𝑛,𝑎,𝑏,1≤𝑛,𝑎,𝑏≤10^9 ,含义如题。说明我们要先尽可能安排三人船坐满,那么与上面类似,我们可能留下。三人船最多坐三人,也可以坐两人或者一人,收费b元。如果恰n%2==0,那就不需要额外安排船,盼望着,盼望着,东风来了,春天脚步近了。双人船最多坐两人,也可以坐一人,收费a元。

一岁就可帅的博客 1859

易盾滑块的js逆向分析

基于易盾的滑块验证码进行逆向分析,最种实现全系列的验证码逆向,包括滑块、点选、推理拼图等多种类型。

shanf7921的博客 3万+

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

Edward的博客 858

CCF PTA 2022年11月C++春游

CCF PTA 2022年11月C++春游题解

全栈工程师Linda的博客 539

GPU架构(1.1)--介绍 GPU的 VPU(Vision Processing Unit)架构

基于自研的 VPU(Vision Processing Unit)架构,专为高性能图形处理和深度学习设计。VPU 架构通过优化计算单元、内存层次结构、同步机制和指令流水线,提供了卓越的性能和能效。VPU 架构通过优化计算单元、内存层次结构、同步机制和指令流水线,提供了卓越的性能和能效。这种架构不仅适用于高性能图形处理,还广泛应用于深度学习、科学计算和边缘计算等领域。通过了解 VPU 架构的详细设计和工作原理,读者可以更好地利用这些先进的 GPU 技术,开发出高效、可靠的计算系统。

MHD0815的博客 1299

一些学校的ACM网址

浙江大学(ZJU):http://acm.zju.edu.cn/浙江工业大学(ZJUT):http://acm.zjut.edu.cn/浙江师范大学(ZJNU):http://acm.zjnu.cn/浙江工商(ZJGSU):http://acm.zjgsu.edu.cn/宁波理工(NIT):http://acm.nit.net.cn上海:华东师范大学(ECNU):http:

斌斌(Java) 5243

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

春游(c++)

具体地,小虾的班里每个人的编号为一个非负整数(可以很大),每个非负整数对应恰好一个同学。每次他会选两名同学,假设这两名同学的编号分别为 x 和 y。如果 x,y 满足 l≤((x&y)+(x∣y))≤r,则称这两名同学相配。计算可得 (x&y)=0,继续计算得到 (*x∣y)=1,所以 (x&y)+(x∣y)=1,满足条件。小虾想问你,问有多少对相配的同学(顺序不同算两种,x,y 可以相同)?另一组满足条件的 x 与 y 即为上文的 x 与 y 交换。一组满足条件的 x 和 y 分别为 11 与 00。

SunArrebol的博客 1577

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

十九届浙大ACM校内赛题G

校内赛题G 思维题 做题的时候,英文不好真的痛苦,这依然是一题思维题。就是送邮件呗!! 思路:按位置从小到大排个序,判断一下负数最小值的绝对值大还是正数最大值大,把大的那一边的最后K个留到最后一次去。其他的就由远及近,远的先送,K个K个送。例如:N为9,K为3的时候,输入-4 -1 -2 -3 1 4 5 7 9,这样就是正数这边最大值大,所以最大的三个,5,7,9留到最后送,其他的由远及近的送,...

米花爱爆炸的博客 440

春游 C++(半对)(最小字典序)

题目描述 春天阳光灿烂,小宋突然心血来潮想骑自行车去学校外面玩,但是到达目的地的路线不止一条,他想尽快的到达目的地,又能不需要骑太远的路, 你能帮助他吗? 输入格式: 输入包含一个测试数据,第一行有三个整数n(2 <= n <= 1000),途中可能经过的地点的个数,地点编号1~n;m(1 <= m <= 10000),为路径的条数;d(2 <= d <= n),目的地编号;其中学校为起点,默认为1。接下来m行: x y time dist , x y表示地点x,y是可以

Archer的博客 2137

19th浙大校赛题解报告

睡过头,下午匆匆忙忙赶到机房已经14点了,发现还好比赛没有开始。 定下心和队友吹吹水等待比赛开始。 开始英语废材淡定的等待队友读题,在榜单上陆续有队伍AC后我们确定先读E题。 E.Potion http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5973 队友读完一看发现就是简单模拟题,从最高层一直往下模拟就行,遂1Y...

咖啡的博客 455

2019 16th浙江省省赛部分题解

B -Element Swapping DreamGrid has an integer sequenceand he likes it very much. Unfortunately, his naughty roommate BaoBao swapped two elementsand() in the sequence when DreamGrid wasn't at...

why932346109的博客 3206

2019年第16届ICPC浙江省省赛 解题报告

A Vertices in the Pocket 线段树+二分,待补 B Element Swapping 如果(i,j)是答案,那么容易得到 两式相除得到a[i]+a[j],然后针对右式是否为0的情况讨论一下,再根据第一个式子判断一下。 代码: #include<bits/stdc++.h> #define ll long long #define ...

LSD20164388的博客 2269

2019浙大校赛部分题解及代码

A #include<bits/stdc++.h> using namespace std; const int MAXN=100100; int a[MAXN],b[MAXN],a1[MAXN],b1[MAXN],a2[MAXN],b2[MAXN]; int main() { int T,i,j,p,q,ans,n,m,a1sum,a2sum,b1sum,b2sum; s...

月阁 532

2019浙江省赛e题(思维题)

题目 我们只需将没排好序的和排好序的比,从后往前,只要不是那个位置上的,计数器++,然后继续将原序列之前一个和现在的比,只要不是,就一定被移动过,我们也不用管移动的到底是谁。 可以手模一下过程。 ...

weixin_43473193的博客 267

2019ACM浙江省赛-Lucky 7 in the Pocket

Lucky 7 in the Pocket Time Limit: 1 Second Memory Limit: 65536 KB BaoBao loves number 7 but hates number 4, so he refers to an integer x as a “lucky integer” if x is divisible by 7 but not divis...

烂人醉 1080

郊区春游(状压DP水题)+ 记录路径

题目链接: https://ac.nowcoder.com/acm/problem/16122 题目大意: 中文 具体思路: 首先对全图跑一遍floyed,然后dp[i][j]表示第i个状态在j点停下来的最短距离。 AC代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define l...

diaomeijiao3430的博客 335

数据结构课程设计

注意:请新建“bank.txt”且在bank.txt中输入“x x 1” main.cpp #include"bank.h" Bank bank; int main() { bank.readAccountput(); while(1) { system("color 1A"); system("cls"); show(); int n; cin>>n;

编写博客,学习交流 1474

华为上机笔试题

华为上机笔试题扑克牌大小 扑克牌大小 链接 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王): 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。 基本规

qq_30347421的博客 640
上一篇: 如何转载大佬的博客= =
下一篇: Codeblocks 出现'auto' changes meaning in C++11的错误提示时的解决方法 / Codeblock与DEVC++编译结果不一致
OneLine_
博客等级 码龄9年 48粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值