博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
The 13th Zhejiang Provincial Collegiate Contest(2016年浙江省赛)
阅读量:6305 次
发布时间:2019-06-22

本文共 3171 字,大约阅读时间需要 10 分钟。

 

前4道水题就不说了,其中我做了C题,1Y,小心仔细写代码并且提交之前得确认无误后提交才能减少出错率。

结果后面2题都由波神做掉,学长带我们飞~

 

 

题意:求到所有点最短花费时间总和以及在这前提下的走过的路的最小花费金钱

分析:首先最短路跑一个,然后在d[v] == d[u] + time的一些边上选择最小金钱,注意这里只要cost[v] = cost不用累加cost[u]。就是跑了两次最短路。

#include 
typedef long long ll;const int N = 1e5 + 5;const int INF = 0x3f3f3f3f;struct Edge { int v, t, c, nex;};Edge edge[N<<1];int head[N];ll _time[N];int cost[N];bool vis[N];int n, m, tote;void SPFA(int s, ll &sumt, ll &sumc) { memset (vis, false, sizeof (vis)); memset (_time, INF, sizeof (_time)); vis[s] = true; _time[s] = 0; std::queue
que; que.push (s); while (!que.empty ()) { int u = que.front (); que.pop (); vis[u] = false; for (int i=head[u]; ~i; i=edge[i].nex) { Edge &e = edge[i]; if (_time[e.v] > _time[u] + e.t) { _time[e.v] = _time[u] + e.t; if (!vis[e.v]) { vis[e.v] = true; que.push (e.v); } } } } memset (vis, false, sizeof (vis)); memset (cost, INF, sizeof (cost)); vis[s] = true; cost[s] = 0; que.push (s); while (!que.empty ()) { int u = que.front (); que.pop (); vis[u] = false; for (int i=head[u]; ~i; i=edge[i].nex) { Edge &e = edge[i]; if (_time[e.v] == _time[u] + e.t && cost[e.v] > e.c) { cost[e.v] = e.c; if (!vis[e.v]) { vis[e.v] = true; que.push (e.v); } } } } for (int i=1; i

题意:Monday是1日或11日或21日的那天是lucky week day,给了开始日期,问从该天起第N天是哪天。(波神一开始就说是循环节,我一听是循环节感觉很陌生,一脸懵逼,当时还看错题意,Monday还看漏了,赛后补了,发现还是很好做的。)

分析:打表找规律,发现400年一个周期,一个周期有2058天lucky day。对于询问只要取模一下,再400乘回来就行了。

#include 
typedef long long ll;int _month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool judge(int y) { if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) { return true; } else { return false; }}struct Data { int y, m, d;};std::vector
vec;void init() { int day = 1; //从注释的代码得知只要处理出400年的循环节 for (int i=1753; i<=1753+399; ++i) { for (int j=1; j<=12; ++j) { int mday = _month[j]; if (judge (i) && j == 2) { mday++; } while (day <= mday) { if (day == 1 || day == 11 || day == 21) { vec.push_back ((Data) {i, j, day}); } day += 7; } day -= mday; } } //calc /* for (int i=0; i
= 1753 + 400) { y -= 400; ady++; } ady += (n - 1) / sz; //add year 2 int add = (n - 1) % sz; ll ty = y, tm = m, td = d; for (int i=0; i
= sz) { ti -= sz; ady++; } ty = vec[ti].y + 1ll * ady * 400; tm = vec[ti].m; td = vec[ti].d; break; } } printf ("%lld %lld %lld\n", ty, tm, td); } return 0;}

  

 

转载于:https://www.cnblogs.com/Running-Time/p/5432935.html

你可能感兴趣的文章
接口和抽象类有什么区别
查看>>
Linux 下添加用户,修改权限
查看>>
请问view controller scene,该如何删除
查看>>
bootstrap新闻模块样式模板
查看>>
zzzzw_在线考试系统①准备篇
查看>>
App Store 审核被拒的23个理由
查看>>
剑指offer第二版-1.赋值运算符函数
查看>>
javascript 对象
查看>>
Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
查看>>
Echart:前端很好的数据图表展现工具+demo
查看>>
CATransform3D iOS动画特效详解
查看>>
Linux VNC黑屏(转)
查看>>
Java反射简介
查看>>
react脚手架应用以及iview安装
查看>>
shell学习之用户管理和文件属性
查看>>
day8--socket网络编程进阶
查看>>
node mysql模块写入中文字符时的乱码问题
查看>>
仍需"敬请期待"的微信沃卡
查看>>
分析Ajax爬取今日头条街拍美图
查看>>
内存分布简视图
查看>>