题目链接:https://cn.vjudge.net/contest/272855#problem/E

题目大意:给你n,a,b,k,f。n代表有n次旅行计划,然后a代表一次单程旅行的车费,b代表从下车的地方上车再到另一个地点的花费,k代表有特价券k张,f代表这样的特价券的价格,特价券的作用是从a-》b,这条路线上的任意次数任意方向上的花费都是免费的,让你求一个总共车程的最小花费。

具体思路:看了一下别人的思路。首先,给你的路程计划是按照时间顺序来的,对于当前的状态,我们可以先记录一下上一次车程的终点,如果当前的车程的起点和上一次的车程的终点相等,那么这条路径的花费就加上b,否则就加上a。然后讲所有的路径的权值保留下来,然后排序,从最大的开始,如果当前的这条路线的总的花费大于f,那么就在原来不适用特价券的基础上减去省下的钱。

AC代码:

#include<bits/stdc++.h>
#include<string>
#include<cstring>
#include<stdio.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn =100000+100;
# define mod 1000000007
# define ll long long
map<string,int>vis;
map<pair<int,int>,int>q;
bool cmp(int t1,int t2)
{
return t1>t2;
}
int tt[maxn];
int main()
{
int n,a,b,k,f;
cin>>n>>a>>b>>k>>f;
string t1,t2;
int num=0;
int sum=0;
int t=inf;
for(int i=1; i<=n; i++)
{
cin>>t1>>t2;
if(vis[t1]==0)
{
vis[t1]=++num;
}
if(vis[t2]==0)
{
vis[t2]=++num;
}
if(vis[t1]==t)
q[make_pair(min(vis[t1],vis[t2]),max(vis[t1],vis[t2]))]+=b,sum+=b;
else
q[make_pair(min(vis[t1],vis[t2]),max(vis[t1],vis[t2]))]+=a,sum+=a;
t=vis[t2];
}
int ans=0;
for(auto i=q.begin(); i!=q.end(); i++)
{
tt[++ans]=i->second;
}
sort(tt+1,tt+1+ans,cmp);
for(int i=1; i<=k; i++)
{
if(tt[i]<f)break;
sum-=tt[i]-f;
}
cout<<sum<<endl;
return 0;
}

E - Travel Cards CodeForces - 847K (思维)的更多相关文章

  1. A. Yellow Cards ( Codeforces Round #585 (Div. 2) 思维水题

    ---恢复内容开始--- output standard output The final match of the Berland Football Cup has been held recent ...

  2. Codeforces 424A (思维题)

    Squats Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  3. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  4. Queue CodeForces - 353D (思维dp)

    https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...

  5. codeforces 1244C (思维 or 扩展欧几里得)

    (点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...

  6. CodeForces - 417B (思维题)

    Crash Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status ...

  7. CodeForces - 417A(思维题)

    Elimination Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit  ...

  8. CodeForces 625A 思维

    题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...

  9. [HDU 1535]Invitation Cards[SPFA反向思维]

    题意: (欧洲人自己写的题面就是不一样啊...各种吐槽...果断还是看晕了) 有向图, 有个源叫CCS, 求从CCS到其他所有点的最短路之和, 以及从其他所有点到CCS的最短路之和. 思路: 返回的时 ...

随机推荐

  1. PHP中类型约束

    类型约束 什么叫类型约束? 就是要求某个变量只能使用(接收,存储)某种指定的数据类型: php属于“弱类型语言”,通常不支持类型约束: 相应的,强类型语言,类型约束却是其“基本特征”. php中,只支 ...

  2. Tomcat安装及配置详解

    Tomcat安装及配置详解   一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Found ...

  3. 解决Qt creator无法输入中文

    详细的方法来自以下网址: http://my.oschina.net/lieefu/blog/505363?p={{currentPage+1}} 需要说明的几点: 设置qmake 的路径使用自身的路 ...

  4. Delphi DbGridEh实现表格没有内容的渐变效果

    OptionsEh = dghExtendVertLines  就会有这个效果, 去掉就会没有这个效果

  5. [您有新的未分配科技点]数位dp:从懵X到板子(例题:HDU2089 不要62)

    数位dp主要用来处理一系列需要数数的问题,一般套路为“求[l,r]区间内满足要求的数/数位的个数” 要求五花八门……比如“不出现某个数字序列”,“某种数的出现次数”等等…… 面对这种数数题,暴力的想法 ...

  6. Cycle Sort (交换次数最少的排序)

    该算法的效率并不高.但是却提供了一个很好的思路.如何让一个序列在最小交换次数下实现有序. Cycle Sort 翻译成中文是 圈排序. 这个圈在于需要交换的数据形成圈. 具体一点: 如: Array ...

  7. hihoCoder #1639 图书馆

    题目大意 给定 $n$($1\le n\le 1000$)个正整数 $a_1, a_2, \dots, a_n$($a_i \le 10^{12}$),令 $s$ 为这 $n$ 个数之和.求 $$ \ ...

  8. Linux内核分析5

    周子轩 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.学习总结 通过gdb ...

  9. Java国密相关算法(bouncycastle)

    公用类算法: PCIKeyPair.java /** * @Author: dzy * @Date: 2018/9/27 14:18 * @Describe: 公私钥对 */ @Data @AllAr ...

  10. 相机标定 和 单应性矩阵H

    求解相机参数的过程就称之为相机标定. 1.相机模型中的四个平面坐标系: 1.1图像像素坐标系(u,v) 以像素为单位,是以图像的左上方为原点的图像坐标系: 1.2图像物理坐标系(也叫像平面坐标系)(x ...