#include//#includeusing namespace std;
#define ll long long
#define inf 1e-5
const int inv2=500000004;
const int inf=2147483647;
const int max=100010;
const int mod=1e9+7;
struct v2;
struct node
}};
bool cmp(const v2 &a,const v2 &b)
node *root=new node();
char str[max*6];
char name[15];
int toint(char c)
void dfs(node *now,int step)
}if(now->li.size()>0)
printf("\n");}}
str[step]=0;}
int main(int argc,char *argv)else
for(i=2;ison[k])else
}temp.num0=num0;
now->li.push_back(temp);
}memset(str,0,sizeof(str));
dfs(root,0);
return 0;
}
第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。
amy 8.999999999999999999999999999999999999999990000沃老師並不會告訴大家分數的排名,但學生間競爭激烈,大家都想知道自己的作文成績在班上的排名。bob 8.9999999999999999999999999999999999999999800
cat 8.9999999999999999999999999999999999999999899999999
但由於作文分數的小數部分可能超級長,難以用肉眼比較兩個數的大小關係,請你幫忙寫個程式,把所有學生按照作文分數排序吧〜
輸入共有n + 1行。第一行有乙個正整數n,代表班上有幾個人。
接下來n行中的第i行,包含乙個字串namei,以及乙個小數scorei,分別代表第i個人的名字以及第i個人的作文得分。
輸出總共n行,每行由乙個名字和乙個小數構成,第i行代表著分數第i高的人的名字以及他的作文得分,代表作文得分的小數必須和輸入一模一樣,也就是原本末尾有多少零,輸出也要有相同數量的零。若分數相同,則名字字典序比較小的放在前面。
這題看似是高精度排序(難道就這麼簡單?),其實仔細看每個高精度浮點數長度是len=6*1e5,高精度比較的時間是o(len);算上排序要超時的,為了防止高精度壓位,資料還特地是6*1e5,要是6*1e4沒準優化能混過去。
知道排序不行,正解也很快能想到,字典樹的dfs去輸出
在輸入時候構建字典樹,但是有個細節。若分數相同,則名字字典序比較小的放在前面。
字典樹節點維護10個指標之外,還有乙個列表用c++的vector表示,列表是空表示,沒有以當前節點結束的字串
注意這句,分數相同意味著浮點數數值相同,相同情況下按照名字字典序輸出
那麼在程式輸入就要處理這塊,把每個名字字尾沒用的0去掉,同時記錄去掉多少0
然後怎麼樣,每次輸入完字串,插入字典樹。
每個字串插入完成後在結束的節點的vector插入資料,有2個資料,剛才記錄的去掉多少0,以及人的名字,也就是vector也要維護乙個結構體
怎麼輸出,dfs字典樹,用後續輸出的方式。
迭代輸出列表的元素(如果有的話),輸出前要sort對名字排序,按照字典序
好了這道題就完成了
**:
牛客練習賽15
時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。amy 8.99999999999999999999...
牛客網練習賽33
tokitsukaze最近沉迷一款rpg。這個rpg一天有k分鐘,每一天從第1分鐘開始。有n種怪物,第i種怪物每天第一次出現的時間為xi分鐘,第二次出現的時間為2 xi分鐘,第三次出現的時間為3 xi分鐘.同一時刻出現的怪物種類越多,打怪獲得的經驗也越高。為了高效練級,tokitsukaze想知道在...
牛客網練習賽33
tokitsukaze最近沉迷一款rpg。這個rpg一天有k分鐘,每一天從第1分鐘開始。有n種怪物,第i種怪物每天第一次出現的時間為xi分鐘,第二次出現的時間為2 xi分鐘,第三次出現的時間為3 xi分鐘.同一時刻出現的怪物種類越多,打怪獲得的經驗也越高。為了高效練級,tokitsukaze想知道在...