【百度之星程序设计大赛】2020年初赛第三场第四题Intersection
生活随笔
收集整理的這篇文章主要介紹了
【百度之星程序设计大赛】2020年初赛第三场第四题Intersection
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄導引
- 系列
- 題目
- Problem Description
- Sample input/output
- 思路
- 代碼
系列
【百度之星程序設計大賽】2020年初賽第二場第一題Poker
【百度之星程序設計大賽】2020年初賽第三場第四題Intersection
題目
Problem Description
Sample input/output
題目來源:百度之星
思路
- 考慮所有車輛通過的時間,實際上就只需要考慮最后車通過的時間情況,因為不能超車。
- 右邊車道(1號車道)通過路口的時間不能壓縮。
- 只有左邊車道通過路口的時間存在壓縮的可能,唯一的壓縮方法就是超過x=0的軸的時候向右變道。變道會節省左側車道一格的時間。
- 在過x軸之前進行變道是不需要考慮的,因為它的效果和過了x軸變道是一樣的。
- 同時要注意,變道不一定必然減少時間成本,如果左側車道的右后方緊鄰著一臺車,變道會造成別住后車,卡了自己后面車的通行時間,如果不進行變道,左車將比右車晚一個時間單位,變道會使得他們倆需要花的時間一增一減,最大值不變,不節省時間,故不進行變道。
- 總之,考慮兩車道最后一臺車的位置進行分類即可,很簡單。
代碼
#include<stdio.h> #include<malloc.h>int main(){ int groups;int n;int * pos_x, * pos_y;int y[2];scanf("%d", &groups);for(int i = 0; i < groups; i ++){scanf("%d", &n);pos_x = (int*)malloc(sizeof(int)*n);pos_y = (int*)malloc(sizeof(int)*n);y[0] = 0;y[1] = 0;for(int j = 0; j < n; j ++){scanf("%d %d", pos_x + j, pos_y + j);if(pos_y[j] >= y[pos_x[j] - 1])y[pos_x[j] - 1] = pos_y[j];}// printf("第一車道:%d 第二車道:%d\n", y[0], y[1]);// 啥也不干往前開,內(右)車道至少y[0] + 1 外(左)車道至少y[1] + 3 if(y[1] == 0){// 外側車道沒有車,看內測道的時間就好了 printf("%d\n", y[0] + 1);}else if(y[0] + 1 >= y[1] + 3){// 如果 y[0] + 1 >= y[1] + 3 肯定不要變道// 時間下線不是外車道可以掌控的,而內車道時間限定死 printf("%d\n", y[0] + 1);}else if(y[0] + 1 == y[1] + 2){// y[0] + 1 = y[1] + 3 - 1 的時候說明2車道最后一輛車在1車道最后一輛車上一位,變道會別車// 故不變道,取外車道時間 printf("%d\n", y[1] + 3);}else{// 最后一臺車可以變道printf("%d\n", y[1] + 2); }}return 0; }總結
以上是生活随笔為你收集整理的【百度之星程序设计大赛】2020年初赛第三场第四题Intersection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2019)vue之电商管理系统
- 下一篇: yolov5-6.0 出现Arial.t