2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】
前言
分数250250250,十分开心
正题
T1:音乐节拍
洛谷题目链接:https://www.luogu.org/problemnew/show/P2969
大意
有n段音乐,每段音乐持续时间不同,q个询问求一个时间点再放那首歌
考试时
开始时发现询问的时间点不是按顺序来的,于是就想到了离线算法。
解题思路
先将询问排个序,然后一个指针指向现在的音乐,如果不是的话就往前推。
代码
#include<cstdio>
#include<algorithm>
#define MN 50000
using namespace std;
struct node{int num,que,ans;
}qu[MN+1];
int n,q,b[MN+1];
bool cmp(node x,node y)
{return x.que<y.que;
}
bool cmp2(node x,node y)
{return x.num<y.num;
}
int main()
{//freopen("mnotes.in","r",stdin);//freopen("mnotes.out","w",stdout);scanf("%d%d",&n,&q);for (int i=1;i<=n;i++)scanf("%d",&b[i]);for (int i=1;i<=q;i++){scanf("%d",&qu[i].que);qu[i].num=i;//标记}sort(qu+1,qu+1+q,cmp);//排序int j=1,now=b[1]-1;//记录现在位置for (int i=1;i<=q;i++){while (qu[i].que>now)//往前推{j++;now+=b[j];}qu[i].ans=j;//记录}sort(qu+1,qu+1+q,cmp2);//排回原来的顺序for (int i=1;i<=q;i++)printf("%d\n",qu[i].ans);//输出
}
T2:电视游戏问题
大意
洛谷链接:https://www.luogu.org/problemnew/show/P2967
有n个价格不同平台,上面有不同的游戏,每个游戏有不同的价格和价值,要求价格不超过v时价值最大。
考试时
开始就想到了,然后以为会超时就没打
解题思路
用f[0][i]f[0][i]f[0][i]表示到现在并且买了这个平台用了i元时最大价值
用f[1][i]f[1][i]f[1][i]表示到上次用了i元时最大价值
要将上一次继承过来
f[0][i]=f[1][i−w]f[0][i]=f[1][i−w]f[0][i]=f[1][i-w]
然后动态转移
f[0][i]=max{f[0][i−w]+c}f[0][i]=max{f[0][i−w]+c}f[0][i]=max\{ f[0][i-w]+c \}
最后更新f[1]f[1]f[1]
f[1][j]=max{f[0][j] , f[1][j]}f[1][j]=max{f[0][j],f[1][j]}f[1][j]=max\{f[0][j]\ \ ,\ \ f[1][j]\}
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,v,f[51][100001],w,c,k,wc;
int main()
{freopen("vidgame.in","r",stdin);freopen("vidgame.out","w",stdout);scanf("%d%d",&n,&v);for (int i=1;i<=n;i++){scanf("%d%d",&w,&k);for (int j=w;j<=v;j++)f[0][j]=f[1][j-w];//继承上次for (int m=1;m<=k;m++){scanf("%d%d",&wc,&c);for (int j=v;j>=w+wc;j--)f[0][j]=max(f[0][j],f[0][j-wc]+c);//动态转移}for (int j=1;j<=v;j++)f[1][j]=max(f[0][j],f[1][j]),f[0][j]=0;//更新最大}printf("%d",f[1][v]);
}
T3:头晕的奶牛
洛谷链接:https://www.luogu.org/problemnew/show/P2017
大意
一个n个点的图,有m1条有向边,有m2条无向边,将无向边变为有向边使得图变为有向无环图。
考试时
有向无环图,我就想到了拓扑排序,然后就敲了一个东西发现不行。然后我就研究,发现可以将所有的点都集结在终点是出度为0的。然后打了一个奇怪的东西就80。
解题思路
先用有向边建图,然后再进行拓扑排序,之后一条无向边的话就将拓扑序排在前面的连排在后面的(因为拓扑序排在后面的无论如何也回不到前面)。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int to,next;
}a[300001];
int n,m1,m2,x,y,ls[100001],in[100001],tot,head,tail,state[100001];
int d[100001],s,t,star,ta;
void addl(int x,int y)
{a[++tot].to=y;in[y]++;a[tot].next=ls[x];ls[x]=tot;
}
void bfs()//拓扑排序
{do{x=state[++head];for (int i=ls[x];i;i=a[i].next){y=a[i].to;if (!d[y]){in[y]--;if (in[y]==0){state[++tail]=y;d[y]=++ta;}}}}while (head<tail);
}
int main()
{//freopen("dizzy.in","r",stdin);//freopen("dizzy.out","w",stdout);scanf("%d%d%d",&n,&m1,&m2);for (int i=1;i<=m1;i++){scanf("%d%d",&x,&y);addl(x,y);}for (s=1;s<=n;s++)if (in[s]==0) state[++tail]=s,d[s]=++ta;//寻找起点bfs(),t++;for (int i=1;i<=m2;i++){scanf("%d%d",&x,&y);if (d[x]<d[y]) printf("%d %d\n",x,y);//判断else printf("%d %d\n",y,x);}
}
T4:过路费
洛谷:https://www.luogu.org/problemnew/show/P2966
大意
一个图,一个点到另一个点的距离就是路径边权和加上路径上的最大点值。
考试时
写了一个spfa,然后发现一种情况
这时spfa就会走1−>2−>4−>51−>2−>4−>51->2->4->5代价11,可是如果走1−>3−>4−>51−>3−>4−>51->3->4->5的话代是价10。然后我就想到了一个方法:
用f[i][j]f[i][j]f[i][j]表示到达i点时路径上最大点值的是j时的最短距离。
然后超时70分
解题思路
首先我们将点值进行排序用num[i]num[i]num[i]表示点权从小到大排在第iii的点。然后枚举k" role="presentation" style="position: relative;">kkk时我们先从点权最小的点开始枚举,然后
dis[i][j]=min\{dis[i][k]+dis[k][j]\}
cost[i][j]=min\{dis[i][j]+max\{c[i],c[j],c[k]\}\}
排点权的目的是为了保证 max{c[i],c[j],c[k]}max{c[i],c[j],c[k]}max\{c[i],c[j],c[k]\}中有里面最大的
代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxs(x,y,z) max(x,max(y,z))
using namespace std;
int n,m,k,num[251],dis[251][251],cost[251][251],c[251],x,y,w;
int main()
{memset(dis,127/3,sizeof(dis));memset(cost,127/3,sizeof(cost));scanf("%d%d%d",&n,&m,&k);for (int i=1;i<=n;i++){num[i]=i;scanf("%d",&c[i]);}for (int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&w);dis[x][y]=dis[y][x]=min(dis[x][y],w);//无向图}for (int i=1;i<n;i++)for (int j=i+1;j<=n;j++)if (c[num[i]]>c[num[j]])swap(num[i],num[j]);//排序for (int q=1;q<=n;q++){int k=num[q];for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if (i!=j&&i!=k&&j!=k){dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);cost[i][j]=min(cost[i][j],dis[i][j]+maxs(c[i],c[j],c[k]));//Floyd}}for (int i=1;i<=k;i++){scanf("%d%d",&x,&y);printf("%d\n",cost[x][y]);}
}
2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】相关推荐
- 2018/7/11-纪中某C组题【jzoj1293,jzoj1294,jzoj1295】
前言 今天C组题目有毒,第一题题目玄学,第二题就是不会,第三题考的贼偏.fw(hjw,his博客:https://blog.csdn.net/gx_man_vip)说今天B组题目还行早知道就去做B组了 ...
- 2018年暑假 纪中培训总结
感想 这个暑假在纪中过得挺充实的,劳逸结合,与同学们相处的很开心.算法也讲了很多,但是基本上都没听懂.在这里学习环境还是很不错的,纪中的同学也都很友善,在这里基本没遇到什么烦心事,每天都很开心. 来这 ...
- 欢乐纪中某B组赛【2019.1.18】
前言 新年新气象,我们又一度迎来新一年的模拟赛(谁想迎来) 总之,有来到了熟悉的地方--纪中. 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerso ...
- 2018/7/12-纪中某C组题【jzoj4272,jzoj4273,jzoj4274】
前言 今天我的想法都是正解,也都写了,结果才160QwQ 今日分数 去掉了十分强大的纪中dalao 正题 T1:jzoj4272-序章-弗兰德的秘密[树形dp] 博客链接:https://blog.c ...
- 欢乐纪中某B组赛【2018.12.15】
前言 题目还好,都是装作很难,其实都不考高深算法. 某位A组dalao来水了个AK. 而且题号都很诡异 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonP ...
- 欢乐纪中某B组赛【2018.12.22】
前言 全暴力第9了解一下, 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 999 ...
- 欢乐纪中某B组赛【2018.12.8】
前言 题目有毒系列.反正我觉得第1题最难,3,4题简单些. 跟jz大佬做题 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreSco ...
- 欢乐纪中某A组赛【2019.7.12】
前言 暴力写挂垫底了呀\huge \color{red}\texttt{暴力写挂}\small\color{white}\\\texttt{垫底了呀}暴力写挂垫底了呀 %%%ZZYrank1\text ...
- 欢乐纪中某A组赛【2019.7.11】
前言 话说今天好像放做题导致BBB组贼难AAA组还好. 成绩 JJJ表示初中,HHH表示高中后面加的是几年级 RankRankRank PersonPersonPerson ScoreScoreSco ...
最新文章
- 中国工业机器视觉产业发展白皮书(附ppt)
- WPF MeshGeometry3D
- Activity Stack
- TLS 改变密码标准协议(Change Cipher Spec Protocol) 就是加密传输中每隔一段时间必须改变其加解密参数的协议...
- Go全局变量syntax error: non-declaration statement outside function bodygo
- Vertica DBD 分析优化设计
- atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc 艾提拉总结 attilax总结 1.1. 修改此java文件,让他启动编译,还是不能生成了新的class,	1 1.2. 查
- 服务端访问Linux的DNS出现DNS request timed out..
- java 动态属性_Java 类动态添加属性字段的操作
- Flutter:布局
- 删除百度网盘“我的应用数据”文件夹
- 要打理好自己的钱袋子
- 算法题目打卡:Ques20201024
- 一键分析你的上网行为, 看看你平时上网都在干嘛?
- 【子网划分两个实例】通过子网数来划分子网和通过计算主机数来划分子网
- ubuntu cron 定时任务
- [再寄小读者之数学篇](2014-05-30 对数不等式)
- secureCRT无法输入
- python中seed的用法什么作用_Python中的seed()方法怎么用
- js截取url问号前面_JS获取URL中问号后面参数值
热门文章
- linux快速切换目录命令,Linux在命令行快速切换目录 - 米扑博客
- linux服务器管理公司用户,在Linux服务器Jenkins中管理用户和角色的方法
- 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
- 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先
- [PAT乙级]1019 数字黑洞
- C++ 实现带权有向图的每对顶点之间的最短路径Floyd算法(完整代码)
- 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
- 服务器水冷系统仿真,水冷漫谈(三)——水冷散热器仿真方法
- android elevation 白色,Android Elevation
- 无法载入增效工具_山东省 智能工具箱 智能工具管理 工具管理企业数字化管理...