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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZOJ-3704 I am Nexus Master! 模拟

發(fā)布時間:2025/3/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZOJ-3704 I am Nexus Master! 模拟 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:有一個判定用戶等級的系統(tǒng),現(xiàn)在不同的等級有不同的評價(jià)標(biāo)準(zhǔn),現(xiàn)給定一個用戶的歷史等級以及當(dāng)前最新的數(shù)據(jù),要求給出目前的等級。

解法:把不同的等級標(biāo)題映射到數(shù)字,然后或者歷史等級的標(biāo)號,然后從大的往當(dāng)前標(biāo)號枚舉,查看是否升級,如果升級則推出判定;否則從當(dāng)前等級往小的標(biāo)號枚舉,查看是否降級,查看降級時只需要判定比率是否小于一個閥值即可,因?yàn)槠渌麧M足歷史等級的條件一定滿足標(biāo)號比它小的等級,遇到不降級即退出判定。由于Peasant的判定于其他不太一樣,在開始的時候就判定一下。

代碼如下:

#include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <map> #include <string> using namespace std;const double eps = 1e-8;struct User {char title[20];int weeks;double down, up, ratio;void read() {scanf("%s %d %lf %lf", title, &weeks, &down, &up);ratio = up / down;}void show() {puts(title);}void modify(); }u;int wk[10] = {0, 0, 4, 8, 15, 25, 40, 60, 80, 100}; int dn[10] = {0, 0, 50, 120, 300, 500, 750, 1024, 1536, 3072}; double ru[10] = {0, 0, 1.05, 1.55, 2.05, 2.55, 3.05, 3.55, 4.05, 4.55}; double rd[10] = {0, 0, 0.95, 1.45, 1.95, 2.45, 2.95, 3.45, 3.95, 4.45}; string str[10] = {"Peasant", "User", "Power_User", "Elite_User", "Crazy_User","Insane_User", "Veteran_User", "Extreme_User", "Ultimate_User", "Nexus_Master" }; map<string, int>mp;int init() {for (int i = 0; i < 10; ++i) {mp[str[i]] = i; } }int sign(double x, double y) {if (x - y > eps) return 1;else if (y - x > eps) return -1;else return 0; }bool judge_peasant() {if (sign(u.down, 50) >= 0 && sign(u.ratio, 0.4) < 0) return true;if (sign(u.down, 100) >= 0 && sign(u.ratio, 0.5) < 0) return true;if (sign(u.down, 200) >= 0 && sign(u.ratio, 0.6) < 0) return true;if (sign(u.down, 400) >= 0 && sign(u.ratio, 0.7) < 0) return true;if (sign(u.down, 800) >= 0 && sign(u.ratio, 0.8) < 0) return true;return false; }bool upclass(int x) {if (u.weeks >= wk[x] && sign(u.down, dn[x]) >= 0 && sign(u.ratio, ru[x]) >= 0) return true;return false; }bool dnclass(int x) {if (sign(u.ratio, rd[x]) < 0) return true;return false; }void User::modify() {if (judge_peasant()) {strcpy(title, str[0].c_str());return;}int rank = mp[title]; // 獲得當(dāng)前的排名for (int i = 9; i > rank; --i) { // 首先判定是否得到了更高的等級 if (upclass(i)) {strcpy(title, str[i].c_str());return;}}for (int i = rank; i > 1; --i) {if (!dnclass(i)) { // 如果能夠保住這個等級則退出判定return; } else { // 否則下降一個等級 strcpy(title, str[i-1].c_str());}} }/* 3 Crazy_User 5000 5000 50000000 Crazy_User 15 800.00 639.99 Veteran_User 45 1000.00 3000.00 Insane_User 45 1000.00 3000.00 */int main() {int T;init();for (scanf("%d", &T); T; T--) {u.read(), u.modify(), u.show();}return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的ZOJ-3704 I am Nexus Master! 模拟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。