Wannafly挑战赛7 - (B,C,E)

2023-11-06 23:38
文章标签 挑战赛 wannafly

本文主要是介绍Wannafly挑战赛7 - (B,C,E),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

还是稍微难一点的题目有意思,B题贪心,C题概率,E题树状数组,不过E题做法应该很多

codeJan与旅行

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述 

codeJan 非常喜欢旅行。现在有 n 个城市排在一条线上,并且 codeJan 的位置不和任何一个城市的位置重叠。
codeJan 想要游览 m 个城市,同时因为时间是不断变化的,游览一个城市多次也是允许的,但是不能永远待在一个城市,否则那样太无聊了。给出这些城市的位置,codeJan 想要知道游览 m 个城市至少需要走多少米?

输入描述:

第一行是一个T≤20代表测试组数。
每组第一行是三个正整数n,m,p,分别代表城市数量、codeJan想要浏览的城市数量和codeJan当前的位置(单位为米)。
第二行包含n个正整数pos[i]表示第i个城市的位置,单位为米。
输入保证pos[i]<pos[i+1](i∈[1,n−1]),并且p ≠ pos[i](i∈[1,n])。

输出描述:

对于每组输入数据输出一个正整数表示 codeJan 至少需要走的距离。
示例1

输入

3 
2 2 2 
1 3 
2 2 1 
2 3 
4 3 4 
1 3 5 6

输出

3
2
3

说明

对于第一个样例的坐标最优移动顺序可以是:2→3→1,移动距离一共是3。
对于第二个样例的坐标最优移动顺序可以是:1→2→3,移动距离一共是2。
对于第三个样例的坐标最优移动顺序可以是:4→5→6→5,移动距离一共是3。

备注:

2≤n≤105,1≤m≤10,1≤p,pos[i]≤109


题解说的很清楚:可以想象的是如果 m 足够大,codeJan 最后肯定会选择在相邻的两个城市来回走。所以可 以枚举两个相邻的城市 (实际上应该是距离最小的两个城市)。并且直接” 奔向” 这两个城市的应该是最吼的!但是 还要考虑,可能先往后退到 一个城市,再” 奔向” 枚举的城市。 举个例子就明白了:n = 3,m = 10, p = 2,三个城市的位置是 1 10 14。 那么应该先退回到 1,然后再在 10 和 14 之间来回走。  时间复杂度:O(n)

参考博客:http://blog.csdn.net/zhou_yujia/article/details/78986785,博主代码写的很巧妙,

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define M 100005
int n,m,p;
ll ans;
int a[M];void solve(int loc,int v) //loc是到达的第一个城市,v是起点到loc城市的距离
{int i;//如果是if(loc!=n))调用的slove函数,那么下面for循环就是先后退一步的体现for(i=loc;i>1;i--)  //向左走,loc-i+1为到城市i用的步数{if(loc-i+1>=m)break;ans=min(ans,1ll*(m-(loc-i+1))*(a[i]-a[i-1])+a[loc]-a[i]+v);}//如果是if(loc!=-1)调用的slove函数,那么下面for循环就是先后退一步的体现for(i=loc;i<n;i++) {if(i-loc+1>=m)break;ans=min(ans,1ll*(m-(i-loc+1))*(a[i+1]-a[i])+a[i]-a[loc]+v);}
}int main()
{int T,i,loc;scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&m,&p);loc=-1;for(i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]<p)loc=i;}ans=1e18;if(m==1){if(loc!=-1) //p不在最左边ans=p-a[loc];if(loc!=n)  //p不在最右边ans=min(ans,(ll)(a[loc+1]-p));printf("%lld\n",ans);continue;}if(loc!=-1) //p不在最左边solve(loc,p-a[loc]);if(loc!=n)  //p不在最右边{if(loc==-1)  //注意此处,如果p在最左边,起点要从1开始solve(1,a[1]-p);else         //其余情况在p点右边城市作为起点solve(loc+1,a[loc+1]-p);}printf("%lld\n",ans);}return 0;
}

C 小Q与氪金游戏

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
Special Judge, 64bit IO Format: %lld

题目描述 

“为世界上所有的美好而战!”
小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金。
在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十分“良心”,抽卡是独立重复实验,单次抽出目标角色卡的概率是p且不存在所谓的“保底”。
为了尽可能省钱,小Q同学只会在抽卡所需宝石不足的情况下再氪一单,并且抽出目标角色卡之后会立即停止抽卡,他想知道为了抽出目标角色卡期望要氪多少单。

输入描述:

输入只有一行,包含三个整数x,y,q(0<x,y,q<10000),分别表示氪一单能得到的宝石数、抽一次卡需要的宝石数以及抽出目标角色卡的概率p乘以10000之后的数。

输出描述:

输出一行,包含一个浮点数,表示抽出目标角色卡期望氪的单数,要求绝对误差或相对误差不超过 1e-9。
示例1

输入

6480 280 98

输出

4.921219218795631382

模拟一直抽的过程,当一直抽下去不中的概率就会为零,设置概率无穷小等价值,但概率无穷小时,结束模拟

代码:

#include<bits/stdc++.h>
#define exp 1e-40
using namespace std;
double pp=1,ans,p,num;
int tot,x,y;
int main(){scanf("%d%d%lf",&x,&y,&p);p/=10000.0;while(pp>exp) //pp是氪金到num单时仍然未中的概率,当概率不为无穷小才继续{if(tot<y){ //tot是手头宝石数int temp=(y-tot)/x; //temp氪几单能够开抽if((y-tot)%x!=0)temp++;num+=temp;tot+=temp*x;}tot-=y;        //抽一次ans+=pp*p*num; //这一抽中了,num为氪金总单数pp*=(1-p);     //仍然未中的概率}printf("%.15lf\n",ans);return 0;
}


珂朵莉与GCD

给你一个长为n的序列a

m次查询

每次查询一个区间的所有子区间的gcd的和mod1e9+7的结果

输入描述:

第一行两个数n,m
之后一行n个数表示a
之后m行每行两个数l,r表示查询的区间

输出描述:

对于每个询问,输出一行一个数表示答案
示例1

输入

5 7
30 60 20 20 20
1 1
1 5
2 4
3 4
3 5
2 5
2 3

输出

30
330
160
60
120
240
100

说明

[1,1]的子区间只有[1,1],其gcd为30
[1,5]的子区间有:
[1,1]=30,[1,2]=30,[1,3]=10,[1,4]=10,[1,5]=10
[2,2]=60,[2,3]=20,[2,4]=20,[2,5]=20
[3,3]=20,[3,4]=20,[3,5]=20
[4,4]=20,[4,5]=20
[5,5]=20
总共330
[2,4]的子区间有:
[2,2]=60,[2,3]=20,[2,4]=20
[3,3]=20,[3,4]=20
[4,4]=20
总共160
[3,4]的子区间有:
[3,3]=20,[3,4]=20
[4,4]=20
总共60
[3,5]的子区间有:
[3,3]=20,[3,4]=20,[3,5]=20
[4,4]=20,[4,5]=20
[5,5]=20
总共120
[2,5]的子区间有:
[2,2]=60,[2,3]=20,[2,4]=20,[2,5]=20
[3,3]=20,[3,4]=20,[3,5]=20
[4,4]=20,[4,5]=20
[5,5]=20
总共240
[2,3]的子区间有:
[2,2]=60,[2,3]=20
[3,3]=20
总共100

备注:

对于100%的数据,有1 <= n , m , ai <= 100000

看的别人的代码: https://www.nowcoder.com/acm/contest/view-submission?submissionId=20738150

理解的不好,先贴上以后慢慢看。。。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define M 100005
#define mod 1000000007ll n,m,p,tot,temp;
ll a[M],gg[20],pos[20],ans[M],f[M],g[M];struct node{ll l,r,id;bool operator <(const node & obj) const{return r<obj.r;}
}q[M];ll gcd(ll a,ll b)
{return b==0?a:gcd(b,a%b);
}ll lowbit(ll x)
{return x&(-x);
}void add(ll x,ll v)
{ll i=x;while(i<=n){f[i]+=v;g[i]-=x*v;i+=lowbit(i);}
}ll sum(ll x)
{ll res=0,i=x;while(i){res+=(ll)(x+1)*f[i]+g[i];i-=lowbit(i);}return res;
}int main()
{int i,j;scanf("%lld%lld",&n,&m);for(i=1;i<=n;i++)scanf("%lld",&a[i]);for(i=1;i<=m;i++){scanf("%lld%lld",&q[i].l,&q[i].r);q[i].id=i;}sort(q+1,q+m+1);p=1;for(i=1;i<=m;i++){while(p<=q[i].r){for(j=1;j<=tot;j++)  //加入右端点的信息gg[j]=gcd(gg[j],a[p]);gg[++tot]=a[p];pos[tot]=p;temp=0;for(j=1;j<=tot;j++)  //去重if(gg[j]!=gg[j-1]){gg[++temp]=gg[j];pos[temp]=pos[j];}tot=temp;for(j=1;j<tot;j++){add(pos[j],gg[j]);add(pos[j+1],-gg[j]);}add(pos[tot],gg[tot]);add(p+1,-gg[tot]);p++;}ans[q[i].id]=sum(q[i].r)-sum(q[i].l-1);}for(i=1;i<=m;i++)printf("%lld\n",ans[i]%mod);return 0;
}


这篇关于Wannafly挑战赛7 - (B,C,E)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359758

相关文章

2024年第十届数维杯国际大学生数学建模挑战赛

竞赛介绍 为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力,内蒙古创新教育学会、内蒙古基础教育研究院决定主办2024年第十届数维杯国际大学生数学建模挑战赛(国际赛)。 数维杯大学生数学建模挑战赛每年分为两场,每年上半年为数维杯国赛(5月,俗称小国赛),下半年为数维杯国际赛(11月),2023年数维杯国际大学生数学建模挑战赛共有近1.5万名学生参赛,参赛队伍来自国内外1177所

高校计算机能力挑战赛C++

2020 1.Excel表列名称由字母A~Z组成,列字母的规律如下: A、B、C.....Z、AA、AB......AZ、BA、BB.......ZZZZY、ZZZZZ....... 输入:输入包含两个列名称字符串,长度均小于等于5。输出: 输出:两个列名称之间共有多少列 样例输入: AA  AZ 样例输出: 24 2."九键拼音中数字与英文字母成对应关系:2--abc, 3-def,

2020计算机挑战赛Java组真题

单选题 1.下列叙述哪些是错误的(). A.final 类不可以有子类 B.构造方法是类的一种特殊方法,其方法名必须与类名相同 C.抽象类可以用new运算符创建对象 D.内存回收程序不允许程序员直接释放内存2.下列叙述哪些是错误的(). A.abstract类不可以用new和构造函数定义对象 B.构造方法的返回值类型只能是void型 C.内存回收程序负责释放无用内存 D.Java类只能是单继承的

2017年华为精英挑战赛

http://blog.csdn.net/h532600610/article/details/70183608 http://blog.csdn.net/mmy1996/article/details/64443159

终于!我找到了开发的得力助手!阿里云天池云原生编程挑战赛参赛攻略

作者:ysevenk_7 参赛准备 我是机缘巧合在 6 月底了解到了天池云原生编程挑战赛,于是乎搜了一下,之前本人对于比赛并没有太多经验,看了大赛介绍之后莫名兴奋,果断拉了队友报名,完成认证、起队名、下载插件注册等准备任务,然后根据官方给出的赛题进行选择,由于我对开源的经验非常少,束手束脚,对于选题只是盲目的看了所使用的技术栈是否匹配,并没有考虑其他因素,于是选择了几天的项目后,看到项目诉求中

第七届MathorCup高校数学建模挑战赛-A题:基于改进的神经网络和混沌时间序列预测控制高炉炼铁过程(续)

目录 6.4 混沌时间序列预测模型  6.4.1 一步预测模型 6.4.4 二步预测模型 6.4.5 二步预测的参数 6.4.6 二步预测的结果 七.问题二模型的建立与求解 7.1 模型的预测成功率 7.1.1 训练集与验证集 7.1.2 数值预测成功率 7.1.3 炉温升降方向预测成功率 7.2 动态预测控制的可行性 7.2.1 神经网络训练函数的选取 7.2.2 神经

第七届MathorCup高校数学建模挑战赛-A题:基于改进的神经网络和混沌时间序列预测控制高炉炼铁过程

目录 摘要 一.问题重述 二.模型假设 三.符号说明 四.问题分析 五.数据预处理 5.1 异常值剔除 5.2 归一化处理 5.3 预处理后的数据 六.问题一模型的建立与求解 6.1 BP 神经网络预测模型 6.1.1 输入层和输出层 6.1.2 训练集和验证集 6.1.3 三层 BP 神经网络结构 6.1.4 BP 神经网络的参数 6.1.6 相关性分析 6.2 小波神经网络预测模型 6.2.

【AI Agent极限挑战赛】三大赛题揭晓

由AIGC开放社区联合联想拯救者、英特尔共同主办的【2024 AI Agent极限挑战赛】于8月17日在上海中庚聚龙酒店成功举办。赛事全面考察参赛者将AI技术应用于实际问题的能力。比赛内容包括对大语言模型的理解、提示词(Prompt)的结构化调优技术、个人助理Agent的开发,以及利用大模型生成文本、图片和视频等多种内容的能力。 赛事共设置“舆情热点话题文章全自动写作大师”、“AI系统运

【2023年全国青少年信息素养大赛智能算法挑战赛复赛真题卷】

目录 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 2023全国⻘少年信息素养⼤赛智能算法挑战复赛⼩学组真题 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 1. 修复机器人的对话词库错误 【题目描述】 基于人工智能技术的智能陪伴机器人的语言词库被黑客的病毒感染了,感染方 式是在单词中的某个字母被增加了两次,例如“hello”变成了

明日开考!2024年全国青少年人工智能创新挑战赛及真题

Scratch实验室2024-06-21讯 2024年全国青少年人工智能创新挑战赛【编程创作与信息学专项赛】第二轮将在明天(2024年6月22日)举行,请参加的同学积极备考,参加选拔赛的青少年需通过“人工智能创新挑战赛”专题页面点击“参加选拔赛”链接,选择“编程创作与信息学专项赛”进入线上竞赛系统参赛,竞赛题目由基础编程题与挑战编程题两部分组成,需要参赛青少年阅读并理解题目后按要求完成编程,决赛在