Trouble of Tyrant

2023-11-06 19:50
文章标签 trouble tyrant

本文主要是介绍Trouble of Tyrant,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


题意:1到i有直达的边,i到i-1也有连接的边,问每条边加d后的最短路径的长度。

#include <iostream>
#include <cstdio>
#include <cstdlib>using namespace std;
/*代码来自tangent(谭)*/
/*最小加长距离必然是从最短距离路径的转折点往后移动而增加的,每次扫描当前转折点到最后一个点
来找下一个最小加长距离的转折点,重复直至转折点移动到最后一个点即可。当最小加长距离增加到某个值以后,
就只能选择1到n的直达路径*/
/*不同路径的边数不同,边数越多则加的总值越大,题目求加值后的最短路径,暴力超时,需要像tangent(KEB)这样打表求解*/
/*以目前在下的代码能力,实现起来需要花大量时间,不掌握了,先停留在理解层面*/
struct road
{long long len;int num;long long val;
};struct road home[100100];
long long dis[100100];
long long pas[100100];int erfen(double n,int l,int r)
{int mid=(l+r)/2;if (home[r].val<=n)  return r;if (home[mid].val>n) return erfen(n,l,mid-1);else if (home[mid+1].val>n) return mid;else return erfen(n,mid+1,r);
}int main()
{int t;int i,j,n,q,k,l;long long sum,mini,ans,adds,cha,a,b;scanf("%d",&t);while (t--){scanf("%d%d",&n,&q);for (i=0;i<n-1;i++){//1到i的路径scanf("%lld",&dis[i]);}for (i=0;i<n-2;i++){//i到i-1的路径scanf("%lld",&pas[i]);}mini=dis[n-2];//1到n的路径k=n-2;sum=0;for (i=n-3;i>=0;i--){//找出最短的路径sum+=pas[i];//i到i-1的路径dis[i]+=sum;//i到1的路径if (mini>dis[i]){//保留最短路径mini=dis[i];k=i;//转折点}}j=0;home[j].len=dis[k];//最短距离home[j].num=k;//转折点home[j].val=0;//加0时while (k<n-2){//转折点往后移动mini=dis[n-2]-dis[k];//直达比最短长多少l=n-2;//初始化lfor (i=k+1;i<n-1;i++)//转折点往后移动,找到最小加长距离{a=dis[i]-home[j].len;//转折点为i时,比上个转折点长多少b=i-home[j].num;//找到下一个转折点增加的边数cha=a/b;//最小加长距离if (a%b)//不是整数+1cha++;if (cha<mini){mini=cha;l=i;}if (cha==mini){if (dis[l]+(n-1-l)*cha>dis[i]+(n-1-i)*cha)//l=i;}}k=l;//保存转折点j++;//下一个home[j].len=dis[k];//转折点为k的初始值home[j].num=k;//路的条数a=dis[k]-home[j-1].len;//计算最小加长距离b=k-home[j-1].num;cha=a/b;if (a%b)cha++;home[j].val=cha;//最小加长距离}while (q--){scanf("%lld",&adds);l=erfen(adds,0,j);ans=home[l].len+(n-1-home[l].num)*adds;//printf("%lld",ans);if (q)printf(" ");}printf("\n");}return 0;
}


这篇关于Trouble of Tyrant的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

试一试Tyrant地牢生成算法

话题 我看到一篇文章讲了一种 Roguelike 地牢生成算法:一种 Roguelike 地牢生成算法 | indienova 独立游戏。这篇文章是翻译,原作者是一款名叫“Tyrant”游戏的作者,在讲自己制作这款游戏时用的地牢生成算法。可我没找到这款游戏的发行版,源代码倒是有:Tyrant - Java Roguelike download | SourceForge.net。可惜是Java工

Tokyo Cabinet和Tokyo Tyrant安装和调用手记

在编译 tokyocabinet 时会报 configure: error: bzlib.h is required 的错误。 解决方法是:   yum install bzip2-devel configure: error: zlib.h is required 原来没有zlib包  rpm -ql zlib命令查询后发现存在  [root@cenosvmbase tokyoc

CSU - 1556 Jerry's trouble(快速幂取模)

【题目链接】:click here 【题目大意】:计算x1^m+x2^m+..xn^m(1<=x1<=n)( 1 <= n < 1 000 000, 1 <= m < 1000) 【解题思路】:快速幂取模 代码: solution one: #include<bits/stdc++.h>#define LL long longusing namespace std;const

[HDU 4334] Trouble (分治+二分查找)

HDU - 4334 给你五个数组,每组 N个元素 (N<=200) 问是否能在五个数组里各选一个数,使得和为0 思路是分治,然后再二分查找,降低复杂度 1) 算出 S1 S_1和 S2 S_2所有元素的和的情况并排序,对 S3 S_3和 S4 S_4亦是如此 O( N2 N^2) 2) 枚举 S3 S_3和 S4 S_4的和数组与 S5 S_5的和的情况 再在 S1 S

When Trouble Strikes

悲观地讲,就算使用 Ruby 编写程序也不能避免出现许多问题。即使对谈论起这个问题感到很抱歉。 但不需要担心!Ruby 拥有一些可以帮助我们调试的特性。稍后我们会看到这些特性,并且我们也会展示你使用 Ruby 时通常会遇到的问题,以及如何解决这些问题。 Ruby 调试器 Ruby 本身带有调试器,并且可以在基础系统上很方便地构建。你可以通过 -r debug 调用解释器将调试器运转,也可以添

UVA 10497 - Sweet Child Makes Trouble(DP+高精度)

题目链接:10497 - Sweet Child Makes Trouble 题意:n个物品,原来物品属于一个地方,现在要把物品重新放回去,问能放几种使得每个物品都与原来位置不同 思路:递推,一开始随便搞了个二维状态,dp[i][j]表示i个物品,有j个位置不同,那么dp[n][n]就是答案,递推式为: dp[i][j] = 1 (j == 0) dp[i] [j]

Codeforces Round 928 (Div. 4) G. Vlad and Trouble at MIT 题解 树形dp

Vlad and Trouble at MIT 题目描述 弗拉迪斯拉夫有个儿子非常想去麻省理工学院。麻省理工学院(摩尔多瓦理工学院)的学生宿舍可以用一棵树来表示,树上有 n n n 个顶点,每个顶点代表一个房间,房间里正好有一个学生。树是一个连通的无向图,有 n n n 个顶点和 n − 1 n-1 n−1 条边。 今晚,有三种类型的学生: 想参加派对和玩音乐的学生(标记为 P \

LINUX QMAIL 451 qq trouble creating files in queue (#4.3.0) 的解决

今天头脑发热,清理了一下/var/qmail/queue下的文件,事先没有想清楚,用了find rm。问题来了,先是发送没有总是,但是收不到,后来干脆把第二级目录下的目录也删除了,直接提示451 qq trouble creating files in queue (#4.3.0)。完了!   GOOGLE了一下,发现那些目录是不能删的!只有重新make setup check,find一下,二级

性能强劲的Tokyo Cabinet 和 Tokyo Tyrant

Tokyo Cabinet Tokyo Cabinet (简称TC)是Mikio Hirabayashi开发的一种DBM的开发库,其数据文件只有一个,里面存放多个<key,value>的数据记录,所有操作都是依据 key做主键操作。key,value都可以是连续不定长,即可以是二进制,也可是是字符串。数据文件中的记录组织有三种模式,hash表,B+树,定长 数组。 做为hash表,主键key必

There appears to be trouble with your network connection. Retrying

一直在报如上错误,试了很多办法,比如删掉yarn.lock,yarn cache clean,删掉node_modules,rm proxy等等都没有用 甚至于重启电脑,然而并没有什么用 突然间想到,我用了clash for window 所以想了下,应该要设置proxy 先查电脑的ip cmd --> ipconfig 然后设置proxy yarn config set proxy