日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PAT甲级题目翻译+答案 AcWing(贪心)

發布時間:2025/3/19 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级题目翻译+答案 AcWing(贪心) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1033 To Fill or Not to Fill (25 分)

題意 :

  • 坐標軸上有n個加油站,給出每個加油站的位置和油價格,給出總路程長度和油箱最大容量,以及每升油平均跑多少路,最開始油箱是空的
  • 如果到不了終點,輸出最多能到達多少路程;如果能到達終點,輸出最低價格

思路 :

  • 按照坐標給每個加油站排序,記得加上終點
  • 如果第一個加油站不在起始點,return
  • 對于當前的加油站,要找到它 范圍內(油箱滿) 中第一個比當前便宜的;如果沒有,就找范圍內相對最便宜的;如果也沒有,說明無法到達終點。可以統一為尋找變量k,出來后再分類
  • 記錄當前油量

語法 :

  • for (int i = 0; i < n;)
#include <iostream> #include <algorithm> using namespace std;const int N = 510;int c_max, d, d_avg, n; struct Stop {double p, d;bool operator< (const Stop& t) const{if (d != t.d) return d < t.d;return p < t.p;} }s[N];int main() {scanf("%d%d%d%d", &c_max, &d, &d_avg, &n);for (int i = 0; i < n; i ++ ) scanf("%lf%lf", &s[i].p, &s[i].d);s[n] = {0, (double)d};sort(s, s + n + 1);if (s[0].d){puts("The maximum travel distance = 0.00");return 0;}double res = 0, oil = 0;for (int i = 0; i < n;){int k = -1;for (int j = i + 1; j <= n && s[j].d - s[i].d <= c_max * d_avg; j ++ ){if (s[j].p <= s[i].p){k = j;break;}else if (k == -1 || s[k].p > s[j].p)k = j;}if (k == -1){printf("The maximum travel distance = %.2lf\n", s[i].d + (double)c_max * d_avg);return 0;}if (s[k].p <= s[i].p){res += ((s[k].d - s[i].d) / d_avg - oil) * s[i].p;oil = 0;i = k;}else{res += (c_max - oil) * s[i].p;oil = c_max - (s[k].d - s[i].d) / d_avg;i = k;}}printf("%.2lf\n", res); }

1037 Magic Coupon (25 分)

題意 :

  • 給兩個序列,每個序列中每個數只能被使用一次(可以不使用),求每次從兩個序列中分別挑出一個數相乘之和最大值

思路 :

  • 雙指針,不需要四個容器,只需要兩個容器即可
  • for循環是滿足條件才會進入到循環內
#include <iostream> #include <algorithm> using namespace std;const int N = 1e5 + 10;typedef long long ll;int n, m; ll a[N], b[N];int main() {scanf("%d", &n);for (int i = 0; i < n && scanf("%lld", &a[i]); i ++ );scanf("%d", &m);for (int i = 0; i < m && scanf("%lld", &b[i]); i ++ );sort(a, a + n);sort(b, b + m);ll sum = 0;for (int i = 0, j = 0; i < n && j < m && a[i] < 0 && b[j] < 0; i ++ , j ++ ) sum += a[i] * b[j];for (int i = n - 1, j = m - 1; i >= 0 && j >= 0 && a[i] > 0 && b[j] > 0; i -- , j -- ) sum += a[i] * b[j];printf("%lld\n", sum); }

1067 Sort with Swap(0, i) (25 分)

題意 :

  • 給一個0-(n-1)的序列,每次可以將數字0與其他任意數交換,求最少交換次數使得達到升序效果

思路 :

  • 先轉換成圖論問題,0的位置在1,所以從0向1連一條邊,1的位置在3,所以1向3連一條邊,3的位置在4,4的位置在0,2的位置在2自己和自己連一條邊,即,如果i在p[i]位置上,就i向p[i]連一條邊,這樣就可以轉化成一個圖論問題,且每一個數只會在一個位置上,只會有一個出邊,且每個位置上只會有一個數,所以每個點只會有一個入邊,即,每個點只會有一個出邊和入邊,也就是說每個點的出度和入度都是1,這樣的圖是很特殊的,必然是一堆環,每個點必然在環中;我們的目標就是讓0在0位置,1在1位置,即讓這堆環變成n個自環;
  • 現在看每個操作的效果,每次交換的數必然和0在同一個環或者不在同一個環,如果在同一個環內部,比如把0和5交換,0在3的位置上,5在7的位置上,那么0就在7的位置上,5就在3的位置上,發現,如果把0和環內的一個點交換,這個環就會破裂成兩個環;如果把0和3交換,那么就是3指向0的指針,也就是3自環,0指向5,這樣就是變成一個自環和另一個環;
  • 如果把0和另外一個環交換,比如0和8交換,就會形成一個更大的環;即,如果把0和另外一個環內交換,就是把兩個環合并;如果0和環內的交換,就會把這個環破開
  • 總結,一共有兩種操作,和環內與和環外;顯然,環外點必然在某個時刻和0交換;和環內點交換的操作也可以分為兩種,一個是與0的下一個點交換,會把下一個點變成自環,第二種是與非下一個點交換,會把環破成兩個環,會發現這樣的話,如果想變成自環,早晚還是要合并回來,所以可以發現,環內的第二種操作必然是不做的;即,對于環內的點,必然只與0的下一個點交換



  • 輸入時,記錄每個值的位置,直到每個點都自環前,將0所在環所有點都自環,直到p[0]==0也就是0也自環,這個環就全部自環了,找到第一個沒有自環的點,如果能找到,將0與這個點交換,合并環
  • 時間復雜度O(N)O(N)O(N)
#include <iostream> using namespace std;const int N = 1e5 + 10;int p[N];int main() {int n; scanf("%d", &n);int id;for (int i = 0; i < n; i ++ ){scanf("%d", &id);p[id] = i;}int res = 0;for (int i = 0; i < n; ){while (p[0]) swap(p[0], p[p[0]]), res ++ ;while (i < n && p[i] == i) i ++ ;if (i < n) swap(p[0], p[i]), res ++ ;}printf("%d", res); }

1125 Chain the Ropes (25 分)

題意 :

  • 每次串連后,原來兩段繩子的長度就會減半。
  • 給定 N 段繩子的長度,你需要找出它們能串成的繩子的最大長度。

思路 :

  • 貪心從小到大選即可

語法 :

  • 由于每次都是現有的一段加上一個新的一段除以2,所以每次改變a[0]即可
#include <iostream> #include <algorithm> using namespace std;const int N = 1e4 + 10;double a[N];int main() {int n; scanf("%d", &n);for (int i = 0; i < n && scanf("%lf", &a[i]); i ++ );sort(a, a + n);for (int i = 1; i < n; i ++ ) a[0] = (a[0] + a[i]) / 2;printf("%d", (int)a[0]); } 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的PAT甲级题目翻译+答案 AcWing(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕在线字幕中文 | 欧美成人午夜精品免费 | 国产一区二区视频播放 | 日本做爰高潮又黄又爽 | 久草高清视频 | 91福利影院 | 久久亚洲精 | 天天躁日日躁狠狠躁av麻豆男男 | 偷啪自啪| 一级片在线观看视频 | 一区二区精品视频 | 亚洲丝袜一区 | 欧美性videos高清精品 | 亚洲中文一区二区三区 | 欧美一区二区三区四区在线观看 | 男人天堂手机在线 | 成人免费版 | 精品人妻一区二区三区四区五区 | 日韩 欧美 自拍 | 三级影片在线免费观看 | www.成人国产 | 一级日韩片| 日韩国产成人 | 老色驴综合网 | 操操综合 | 激情视频亚洲 | 欧美成人午夜精品久久久 | 国产女人叫床高潮大片免费 | 色呦呦一区二区三区 | 在线观看国产 | 成人在线一区二区三区 | 日韩欧美视频在线免费观看 | 大尺度做爰啪啪床戏 | 91在线综合 | 日韩成人在线视频观看 | 久久精品国产网红主播 | 色屁屁一区二区 | 少妇2做爰交换朴银狐 | 亚洲乱码国产乱码精品精剪 | 日本高清一区二区视频 | 黄色小视频免费 | 日韩黄片一区二区三区 | 四虎视频国产精品免费 | 亚洲国产不卡 | 国产精品国产三级国产普通话对白 | 亚洲黄色大片 | 精品丰满人妻无套内射 | 欧美日韩一级片在线观看 | 亚洲性生活 | 亚洲电影在线观看 | 成人在线观看黄色 | 麻豆tv在线| 日韩成人av在线播放 | 欧美一区二区三区成人久久片 | 91导航| 我们的生活第五季在线观看免费 | 日韩在线播放中文字幕 | 日韩日b| 国产精品自拍网站 | 欧美a级肉欲大片xxx | 日韩成人av一区二区 | av大全在线观看 | 91污片 | 久久亚洲综合国产精品99麻豆精品福利 | 一级理论片 | 西西444www大胆无视频 | 午夜精品福利一区二区 | 国产av国片偷人妻麻豆 | 后入内射欧美99二区视频 | 琪琪五月天| a爱视频| 日本伦理一区二区 | 国产无人区码熟妇毛片多 | 中文字幕制服丝袜 | 一级黄色片视频 | 天堂色av | 成人免费大全 | 欧美日本亚洲 | aa一级黄色片| 天天撸夜夜操 | 自拍偷拍第 | 大尺度在线观看 | 国产精品久久毛片 | 91看片就是不一样 | 国产高清视频在线观看 | 国产精品久久久久久人妻精品动漫 | 午夜一区二区三区在线观看 | 国产精品久久久久久久久久久久 | 欧美一区二区三区爱爱 | xxxx毛片| 污污视频在线播放 | 欧美成人高清视频 | 制服丝袜av在线 | 伊人久操视频 | 成人超碰在线 | 狼色网| 老司机在线永久免费观看 | 国产精品久久久久久一区二区三区 | 精品人妻一区二区三区久久夜夜嗨 |