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

感谢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. javascript中“use strict”的好处和坏处

    1.为什么使用严格模式? 消除javascript语法的一些不合理.不严谨之处,减少一些怪异行为: 消除代码运行的不安全之处,保证代码的运行: 提高编译效率,增加运行效率: 为未来新版本的javasc ...

  2. LeetCode 86. 分隔链表(Partition List)

    题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-> ...

  3. tp5最强分页 自定义model,控制器引用。只显示一页

    1.不多逼逼 model 代码 <?phpnamespace app\common\model; use think\Model; class Fpage{ private $page;//当前 ...

  4. [转]spring的filter中targetFilterLifecycle作用

    在web.xml中进行配置,对所有的URL请求进行过滤,就像"击鼓传花"一样,链式处理. 配置分为两种A和B. A:普通配置 在web.xml中增加如下内容:<filter& ...

  5. props的写法

    简写 props: ['demo-first', 'demo-second'] 带类型 props: { 'demo-first': Number, 'demo-second': Number } 带 ...

  6. javascript之Prototype属性

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 非监督的降维算法--PCA

    PCA是一种非监督学习算法,它能够在保留大多数有用信息的情况下,有效降低数据纬度. 它主要应用在以下三个方面: 1. 提升算法速度 2. 压缩数据,减小内存.硬盘空间的消耗 3. 图示化数据,将高纬数 ...

  8. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_1 搭建环境

    创建项目 使用骨架,创建webapp 为了创建项目更快速maven设置 archetypeCatalog internal 修改编译的版本 从昨天的课程内复制 相关的坐标.上面是版本锁定. 复制前端的 ...

  9. 【JVM学习笔记】类加载过程

    在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的:提供了更大的灵活性,增加了更多的可能性 JVM启动过程包括:加载.连接.初始化 加载:就是将class文件加载到内存.详细的说是 ...

  10. [转]【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用

    [From]https://www.cnblogs.com/sxdcgaq8080/p/7156227.html               隔壁的,加个引用做书签! [JVM]调优笔记2-----J ...