1112 kgold
uvalive 5868
基準時間限制:1 秒 空間限制:131072 kb 分值: 40
難度:4級演算法題
給出n個人在0時刻的財富值m[i](所有人在0時刻的財富互不相等),以及財富增長速度s[i],隨著時間的推移,某些人的財富值會超越另外一些人。如果時間足夠長,對於財富增長最快的人來說,他的財富將超越所有其他對手。
求發生的前10000次超越,分別是誰超過了誰?如果總的超越次數不足10000,則輸出所有超越,如果1次超越都不會發生,則輸出no solution。
輸出按照超越發生的時間排序,同一時刻發生的超越,按照超越者的編號排序,如果編號也相同,則按照被超越者的編號排序。所有排序均為遞增序。
input
第1行:n,表示人的數量。(1 <= n <= 10000)output第2 - n + 1行:每行2個數,分別是初始的財富值m[i],和財富增長速度s[i]。(0 <= m[i] <= 10^5, 1 <= s[i] <= 100)
輸出前10000次超越,超越者和被超越者的編號。如果總的超越次數不足10000,則輸出所有。如果1次超越都不會發生,則輸出no solution。input示例輸出按照超越發生的時間排序,同一時刻發生的超越,按照超越者的編號排序,如果超越者編號也相同,則按照被超越者的編號排序。所有排序均為遞增序。
4output示例1 100
2 100
3 14 50
2 31 32 4
1 4
李陶冶(題目提供者)
這題可以簡單轉化為求直線交點問題,當且僅當財富值m[i]s[j]時才會發生超越
因此 find函式裡找到當前時間下,每個點超越(或者被超越了幾次)->這裡二分一下即可,剩下的用
乙個優先佇列儲存即可(n^2存點,僥倖通過)
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define maxn 10005
#define eps 1e-8
using namespace std;
struct res
}s[maxn];
struct coin
}c[maxn];
struct point
}now;
priority_queueq;
int n;
int find(double x)//判斷x秒時,每個人的財富超過了多少人的財富
sort(c+1,c+n+1);
for(i=1;i<=n;i++)
if(i0.00001)
for(i=2;i<=n;i++)
for(j=1;jeps && x
}for(i=1;i<=10000;i++)
else
break;
}}
51nod 1278 相離的圓
題目 平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如 4個圓分別位於1,2,3,4的位置,半徑分別為1,1,2,1,那麼,這5對都有交點,只有是相離的。input 第1行 乙個數n,表示圓的數量 1 n 50000 第2 n 1行 每行2個數p,r中間用空格...
51 NOD 1278 相離的圓
1278 相離的圓 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如 4個圓分別位於1,2,3,4的位置,半徑分別為1,1,2,1,那麼,這5對都有交點,只有是相離的。inpu...
51Nod1753 相似子串
兩個字串相似定義為 1.兩個字串長度相等 2.兩個字串對應位置上有且僅有至多乙個位置所對應的字元不相同 給定乙個字串,每次詢問兩個子串在給定的規則下是否相似。給定的規則指每次給出一些等價關係,如 a b b c 等,注意這裡的等價關係具有傳遞性,即若 a b b c 則 a c input 第一行乙...