PTA 7-4(队列) 银行排队问题之单窗口“夹塞”版(30 分) 30分代码

来源:互联网 发布:qt中socket编程 编辑:程序博客网 时间:2024/04/29 16:01

模拟一下

(注:博客作为交流使用,切勿抄袭应付作业)


#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <cmath>#include <set>#include <map>#include <stack>#include <queue>#include <ctype.h>#include <vector>#include <algorithm>#include <sstream>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)using namespace std;typedef long long ll;const int maxn = 10000 + 7;int n, m, L, sum;struct node {    string name;    int t, p, len;}a[maxn];bool vis[maxn];vector<string> vec;map<string, int> mp;void init() {    memset(vis, false, sizeof vis);    sum = 0;    scanf("%d %d", &n, &m);    for(int i = 1; i <= m; ++i) {        scanf("%d", &L);        string s;        for(int j = 0; j < L; ++j) {            cin >> s;            mp[s] = i;            //vec[i].push_back(s);        }    }    int cnt = m+1;    for(int i = 0; i < n; ++i) {        cin >> a[i].name;        if(mp[a[i].name] == 0) mp[a[i].name] = cnt++;        scanf("%d %d", &a[i].t, &a[i].p);        if(a[i].p > 60) a[i].p = 60;    }    //cout << mp["ANN"] << " === " << mp["AMY"] << endl;}void work(int pos, int id) {    for(int i = pos+1; i < n; ++i) {        if(!vis[i]) {            if(mp[a[i].name] == id) {                if(a[i].t <= sum) {                    vis[i] = true;                    a[i].len = sum - a[i].t;                    sum += a[i].p;                    vec.push_back(a[i].name);                }                else return;            }        }    }}void solve() {    for(int i = 0; i < n; ++i) {        if(!vis[i]) {            vis[i] = true;            if(a[i].t > sum) sum = a[i].t;            a[i].len = sum - a[i].t;            sum += a[i].p;            vec.push_back(a[i].name);            work(i, mp[a[i].name]);        }    }    for(int i = 0; i < vec.size(); ++i)        cout << vec[i] << endl;    sum = 0;    for(int i = 0; i < n; ++i) {        sum += a[i].len;    }    printf("%.1lf\n", 1.0*sum/n);}int main() {    init();    solve();    return 0;}


阅读全文
1 0
原创粉丝点击