这道题真的第一眼完全想不到是最短路啊!!!!!!!!

感谢DR大佬讲解!!!!!90°鞠躬 =u=

暂时没有评测网址,(因为需要special judge)敬请期待

机房另一大佬JYY题解,可以对比参照(说不定就会了呢)<-点这个

(她的博客里有一些问题答疑不懂得去看看哈)


题面:

分析过程依旧来源于老师

为什么可以连图的证明过程忽略(因为我不会

这张图基本就是所有能被表示的数,求出的最短路就是最小能被表示的数,由于它们都对 a[1] 取模,根据这点可以用已求出的数据计算出每种碎片的使用情况,(我们默认能多用 a[1] 就多用)这题是“任意一种方案即可”,所以我们不用考虑“用 n 个 a[ j ] 可以表示 a[ i ] ”的情况

参考代码可能会便于理解思路(代码有超级超级详细的注释哦真的不看看嘛)

/*数组变量解释:
dis 存放最短路值,pre 存放每个价值所用的碎片编号, vis , sum 代码中都有详细解释
*/
#include<bits/stdc++.h>
#define A 20001
#define N 5001
using namespace std;
typedef long long ll;
struct node
{
int x; ll v;
bool operator < (const node &oth) const
{
return v > oth.v;
}//重载运算符实现大根堆
};
priority_queue<node>q;
int pre[A], n, m, K, vis[A];
ll a[N], dis[A], sum[N];
ll getin()
{
ll s = ; char c = getchar();
while (c < '' || c > '') c = getchar();
while (c <= '' && c >= '') s = s * 10ll + c - '', c = getchar();
return s;
}//快读忽略
void dijkstra()
{
for (int i = ; i < a[]; i++) dis[i] = 1e18;
dis[] = ;
q.push((node) {, });
//赋初值
while (!q.empty())
{
int u = q.top().x;//这是当前的点
q.pop();
if (vis[u]) continue;
vis[u] = true;
// vis数组用来判断是否更新
//参考dijsktra
for (int i = ; i <= n; i++)
{
int v = (u + a[i]) % a[];//目前的需要更新的点
if (dis[u] + a[i] < dis[v])
{
dis[v] = dis[u] + a[i];//判断是否需要更新
pre[v] = i; //这个正在更新的点边权(a[j]) 的编号 J
q.push((node){v, dis[v]});//加入堆
}
}
}
}
int main() {
//freopen("equip.in", "r", stdin);
//freopen("equip.out", "w", stdout);
scanf("%d%d%d", &n, &m, &K);
for (int i = ; i <= n; i++) a[i] = getin();
dijkstra();
for (int i = ; i <= m; i++) {
ll x = getin();
if (x < dis[x % a[]]) printf("No\n");//判断无法被兑换的情况
else {
printf("Yes");
if (K == ) {
for (int j = ; j <= n; j++) sum[j] = ;
//sum[j] 表示的是每种碎片需要的数量
sum[] += (x - dis[x % a[]]) / a[];
//需要的 a[1] 碎片数量
// x-dis[x%a[1]] 是刨掉a[1]以外碎片使用的总价值
while (x % a[])
{
sum[pre[x % a[]]]++;//这个位置的碎片数++;
x = ((x - a[pre[x % a[]]]) % a[] + a[]) % a[];
//把当前的碎片和a[1]刨掉剩下的需要价值(那么长主要是保证其精度不要在意)
}
for (int j = ; j <= n; j++) printf(" %I64d", sum[j]);
//简简单单的输出,不用的话就是输出0 (反正任意一种情况都能过2333)
}
printf("\n");
}
}
return ;//防我自己抄袭
}

好的就是这些,由于目前没找着原题,所以无法评测,看不懂可以找我

ありがとうございます

【一道来自老师的题的题解】equip——奇妙的最短路的更多相关文章

  1. CodeM美团点评编程大赛复赛 做题感悟&题解

    [T1] [简要题意]   长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...

  2. 【BZOJ1036】[ZJOI2008] 树的统计Count(一道可怕的模板题:树剖+线段树)

    点此看题面 题解 这真的只是一道模板题:一个树链剖分套上一个线段树(令我窒息的组合). 既然是模板题,那就直接上代码吧. 代码 #include<bits/stdc++.h> #defin ...

  3. HDU100题简要题解(2060~2069)

    这十题感觉是100题内相对较为麻烦的,有点搞我心态... HDU2060 Snooker 题目链接 Problem Description background: Philip likes to pl ...

  4. HDU100题简要题解(2050~2059)

    HDU2050 折线分割平面 题目链接 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以 ...

  5. 洛谷P2918 [USACO08NOV]买干草(一道完全背包模板题)

    题目链接 很明显的一道完全背包板子题,做法也很简单,就是要注意 这里你可以买比所需多的干草,只要达到数量就行了 状态转移方程:dp[j]=min(dp[j],dp[j-m[i]]+c[i]) 代码如下 ...

  6. 又一道区间DP的题 -- P3146 [USACO16OPEN]248

    https://www.luogu.org/problemnew/show/P3146 一道区间dp的题,以区间长度为阶段; 但由于要处理相邻的问题,就变得有点麻烦; 最开始想了一个我知道有漏洞的方程 ...

  7. [真题] 一道 vsftp 运维题

    一道 vsftp 运维题 一.前言 在 V 站上凑巧看到了好友发的求助帖,五天时间一个理他的都没有.哈哈哈~ 废话不多说,我们来试试. 二.题目 这里我们假设存在这样的场景: 网络内有普通用户 ade ...

  8. QDUOJ 一道简单的数据结构题 栈的使用(括号配对)

    一道简单的数据结构题 发布时间: 2017年6月3日 18:46   最后更新: 2017年6月3日 18:51   时间限制: 1000ms   内存限制: 128M 描述 如果插入“+”和“1”到 ...

  9. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

随机推荐

  1. Python实现telnet命令测试防火墙

    Python实现telnet命令测试防火墙 telnet主要用于测试主机端口是否开通 ping主要是用来测试网络是否畅通和主机是否正在使用 使用Python实现Telnet测试主机端口是否开通的功能. ...

  2. ansible主机互信

    前文讲了ansible,但是ansible是基于ssh来做的,首先的和管理主机之间做主机互信,简单来说主机互信就是把主机上产生的公钥传到互信主机上就可以了. 在主机上产生公钥文件.使用命令:ssh-k ...

  3. PHP-异常-1

    PHP 错误处理 在 PHP 中,默认的错误处理很简单.一条消息会被发送到浏览器,这条消息带有文件名.行号以及一条描述错误的消息. 在创建脚本和 web 应用程序时,错误处理是一个重要的部分.如果您的 ...

  4. python-numpy-1

    mean() mean() 函数定义: numpy.``mean(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globa ...

  5. 【学习】eclipse自动提示+自动补全

    解决代码的自动提示问题: 1.打开 Eclipse -> Window -> Perferences 2.找到Java 下的 Editor 下的 Content Assist , 右边出现 ...

  6. HearthBuddy的狂野和休闲模式来回切换

    表现1 配置是标准,休闲模式 然后一直重复提示 select desire deck select causal mode 表现2 配置是狂野,休闲模式 然后一直提示 切换到狂野 切换到标准 把模式切 ...

  7. python 面对对象 类(继承, 多态)

    继承,继承其它实例化样本的属性和方法,需要在声明里重新定义和使用 class School(object): def __init__(self, name, addr): self.name = n ...

  8. Cortex-M3 SVC与PendSV

    [SVC] SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中.SVC用于产生系统函数的调用请求.例如,操作系统通常不允许用户程序直接访问硬件, ...

  9. 自定义Dialog布局的弹窗功能的简单实现

    package com.loaderman.dialogdemo; import android.os.Bundle; import android.support.v7.app.AlertDialo ...

  10. ASP.Net Core承载外部程序集

    故事背景   一般情况下ASP.Net Core项目配置可以直接在appsetting.json中添加,也可以在项目中添加新的配置文件.但如果想和其他项目一起实现配置文件通用呢?我们可以用绝对定位去访 ...