20181201(小明上学)
代码1
若经过道路,则直接累加时间;若经过路口,则看亮的是什么灯,然后写一个函数getWaitTime(int type, int leftTime) 来计算要等多久。
1 | //freopen("D://input.txt","r",stdin); |
测试数据
1 | 30 3 30 |
20181202(小明放学)
代码1
1 | //freopen("D://input.txt","r",stdin); |
这题要注意一点,因为1e6*1e5大于int的表示范围,所以计算绝对时间时用到long long,同时计算总的时间time2也要用long long。
20181203(CIDR合并)
代码1
我们设置一个结构体来表示标准的IP前缀。
1 | struct Ippre{ |
写一个函数bool isContain(Ippre& ip1,Ippre& ip2) 来看ip1是否包含ip2。写一个函数bool merge2(Ippre& ip1,Ippre& ip2, Ippre ip3)来判断ip1和ip2是否可以合并,若可以则返回true,并把合并结果放到ip3中,否则,返回false。
一开始,输入数据,来将形形色色的Ip前缀转化为标准形式。Ippre convert(string str) 来完成转换的功能。将所有的ip前缀存放在set<Ippre> ipSet 中。
1 | //freopen("D://input.txt","r",stdin); |
第17行我把3错写成2了,好坑啊。
80分。答案错误
20181204(数据中心)
代码1
仔细观察$T_{MAX}$ 的定义,发现它其实就是最小支撑树的最大边。我们直接使用Kruskal算法。
我们定义一个数据结构:
1 | struct Edge{ |
然后把每个输入的边作为Edge存入vector<Edge> edges 中。按照w属性排序。由于要用到并查集,所以要设置vector<int> father 数组,然后再写int findFather(int x),以及void union2(int a,int b) 函数。
在运行kruskal时,记录选择的边的最大权值。
1 | //freopen("D://input.txt","r",stdin); |