(某竇老師的題)表示以後不想看到這名字,肽毒瘤
題意:我們可以把供遊艇航行的航道看作一條單行道,航道上 \(n+1\) 艘遊艇自西 向東依次編號為 \(0..n\),小 z 所在的遊艇在最西邊編號為 0,而編號為 \(n\) 的遊艇 還要再往東航行一段才是小蠻腰。由於晚上航行視野不佳,排在後面的船不允 許超越前面的船,而當前面的船航行速度太慢時,後面的船隻能以相同的速度 緊跟著,此時兩船之間的距離可以忽略。 已知第 i 艘遊艇船身長為 \(l[i]\),船頭與小蠻腰距離為 \(x[i]\),最大航行速 度為 \(v[i]\)。小 z 好奇,他到底要等多久,才能乘著遊艇經過小蠻腰腳下呢??
反思:考場上先是想了貪心(顯然是不對的),,又推了dp,
$f_i=max(x_i/v_i, f_+l_/v_) $
最後的時候發現好像也是不對的,沒有考慮過線後其實也在堵著。。。然後就涼了;
倒是\(yych\),很澀會,機房唯一乙個切此題的人%%%%%
正解是實數域上二分:
可以看出答案是具有單調性的, 所以我們可以二分乙個時間,判斷它成不成立。
設\(dis =tim*v_i\)
\(lin_i\) 為\(tim\)時間後第\(i\)個船離小蠻腰還有多久
則就有dp : \(lin[i]=max(lin[i]-dis, l[i+1]+lin[i+1])\);
(\(lin[i]\)初值賦的\(x[i]\))
然後只需判斷是不是所有的穿都能越過小蠻腰啊~~
ps:\(c++11\)用「%lf「會屎的很慘
/***********絲毫不慌********/
#include#include#include#include#define n 100005
using namespace std;
double l[n], x[n], v[n];
double f[n], lin[n];
int n, t;
bool check(double tim)
return true;
}void solve1()
printf("%.4f\n", l);
}signed main()
return 0;
}
題意:
小 z 事先準備了乙份地圖,地圖上給出了 n 個小 z 心儀的城市,依次編號 1…n,以及 m 條連線兩個城市的路,編號 1…m。小 z 打算把 m 條路都走一遍且 僅一遍,但他發現這樣的路線可能是不存在的。於是他打算,當他走到乙個城 市後發現從這個城市出發的道路他都已經走過了,他便會坐飛機到另乙個城市, 然後繼續他的旅行。 現在小 z 想知道,在最好的路線計畫下,他至少要坐多少趟飛機 。。
【輸入格式】第一行為測試資料組數 t(1≤t≤10)。 每組測試資料的第一行為城市數 n 及道路數 m。 接下來 m 行,每行兩個整數 x 和 y,表示一條連線城市 x 和城市 y 的雙向 道路。
【輸出格式】對於每組測試資料,輸出第一行包含乙個整數 k,表示小 z 至少要坐多少 趟飛機。 接下來 k+1 行,第 i 行輸出小 z 的第 i 段行程。若第 i 段行程經過 x 條道 路,則先輸出 x,然後輸出 x 個整數,分別表示路線經過的道路的編號。若是 正向通過第 i 條道路,則輸出 i,否則輸出-i。 若有多組方案,輸出任意一組。
(這不顯然是一筆畫問題嗎。。。然而我並沒有做過尤拉迴路的題,不會,果斷放棄)
性質:乙個尤拉迴路裡, 所有點度數均為偶數;
乙個聯通塊內,度數為奇數的點的個數為偶數
思想: 把乙個聯通塊內度數為奇數的點連起來(虛邊),然後它就可以一筆畫了;
那麼換個角度想,連了多少條虛邊,不就是坐了多少趟飛機嗎;emm....
(然而毒瘤出題人還讓你輸出路徑)
1.存邊時把路徑的權值賦成 id 或 -id
2.每遍歷一條邊就把它放到當前旅程vector裡記錄下來;
/***********絲毫不慌********/
#include#include#include#include#define n 100010
using namespace std;
int read()
int t, n, m, tot;
vectorv[n];
int nxt[n<<2], cnt = 1, to[n<<2], head[n], val[n<<2], vis[n], vis_e[n<<2], deg[n];
void add(int x, int y, int z)
void dfs(int x)
}signed main()
int last = 0;
for(int i = 1; i <= n; i ++)
} for(int i = 1; i <= n; i ++)
} for(int i = 1; i <= n; i ++)
}// for(int i = 1; i <= m; ++ i )
printf("%d\n",tot - 1);
for(int i = 1; i <= tot; i++)
} return 0;
}
題意:
【題目描述】小 z 的爸爸是一位通訊工程師,他所在的通訊公司最近接到了乙個新的通 信工程建設任務,他們需要在 c 城建設一批新的基站。 c 城的城市規劃做得非常好,整個城市被規整地劃分為 8 行 8 列共 64 個街 區,現在已知新基站需要建設在哪些街區,用字元「#」表示,而不需要建設基 站的街區用「.」表示.. 爸爸告訴小 z 說,建設基站最耗時的是基站兩兩之間互相通訊的除錯,每 建設乙個新的基站,需要確保其與其他已經建好的基站之間能互相通訊,若兩 個基站的座標分別為\((x1,y1)\)和\((x2,y2)\),則除錯所需時間大概為 \(max(|x1- x2|,|y1-y2|)\),而乙個基站的總除錯時間為與其他已經建好的基站的除錯時間 中的最大值。現在爸爸想考考小 z,看小 z 能否計算出如何設計建設基站的順 序,使得總的除錯時間盡量少
【輸入格式】輸入乙個 8 行 8 列的矩陣,全部由「#」和「.」組成。
【輸出格式】輸出乙個整數,表示花費的最少時間。
【樣例輸入一】
【樣例輸出一】8
思路: 資料10以內顯然是可以暴力的,\(n!\)的那種\(10!\) 才3628800, 顯然是可以過的;;
正解:(非正解)
先盜圖(自己懶得畫啦)
看上面這個圖
(已經解釋得很清楚)先放中間比先放四周優;
然後就考慮怎麼先放中間 正解給的是乙個不像dp的dp 然後我用的爆搜
(調了乙個下午);
大概思路就是:每次找到剩下的點構成的最大的矩陣(就是保證矩陣的上下左右邊界都有點,之外沒有),列舉最後放哪一行哪一列就行,往下搜就行,一直搜到只剩乙個點;
乙個比較麻煩的地方就是:回溯的時候比較難回溯,要把所有的點都記錄下來;
然後ctrl+c, ctrl+v 就行
(ps:不要覺得搜尋過程很相近就無腦複製, 有些細微地方是很要命的, 要不也不會調一下午);
/***********絲毫不慌***********/
#include#include#include#include#include#define it set::iterator
#define ri register int
using namespace std;
int cnt, vis[100];
struct node
e[100];
int ans = 1e9;
int zh_dou = 233333;
set t[20];
void solve(ri v)
\)
NOIP2011模擬9 20 素數密度
time limits 1000 ms memory limits 262144 kb description 給定區間 l,r l r 2147483647,r l 1000000 請計算區間中素數的個數。input 兩個數l和r output 一行,區間中素數的個數。sample input 2...
2017 9 7 模擬考試
問題描述 一張長度為 的紙帶,我們可以從左至右編號為0 紙帶最左端標號為 0 現在有 次操作,每次將紙帶沿著某個位置進行摺疊,問所有操作之後紙帶 的長度是多少。輸入格式 第一行兩個數字 如題意所述。接下來一行 個整數代表每次摺疊的位置。輸出格式 一行乙個整數代表答案。樣例輸入 5 2 3 5 樣例輸...
RHSCA模擬考試
開始考試 桌面是個黑框子 點選reboot按鈕,破解密碼 開機成功,輸入startx進入圖形介面 不能複製,要在物理機用ssh root 172.25.0.11 遠端連線,就可以複製貼上了 hostname server.reorigion5.example.com 四級網域名稱 有問題 10.配置...