演算法競賽入門經典第六章例題6-1 Concurrency Simulator UVA
#include<iostream>
#include<string>
#include<deque>
#include<vector>
#include<map>
using namespace std;
#pragma warning(disable:4996)
map<string, int> var;
deque<int> ready, block;
int lock = 0;
vector<deque<string>> all;
int n, t[5], Q;//var=constant 、print var 、lock 、unlock 、 end
int sen_id(string &s,int id,int &T) {//-1堵塞 0結束 1結束語句
int pos;char st[50];
if ((pos = s.find('=')) != string::npos) {
T -= t[0];
s[pos] = ' ';
sscanf(s.c_str(), "%s %d", st, &pos);
s = st;
var[st] = pos;
return 1;
}
switch (s[0])
{
case 'p':
T -= t[1];
sscanf(s.c_str(), "%s %s",st,st);
printf("%d: %d\n",id,var[st]);
return 1;
case 'l':
T -= t[2];
if (!lock) lock = 1;
else { all[id].push_front("lock"); block.push_back(id); return -1; }
return 1;
case 'u':
T -= t[3 ];
lock = 0;
if (!block.empty()) ready.push_front(block.front()), block.pop_front();
return 1;
case 'e':return 0;
default:
break;
}
}
int main(){
#ifdef _DEBUG
freopen("in", "r", stdin);
freopen("out", "wb", stdout);
#endif // _DEBUG
int N;
cin >> N;
int cnt = 0;
while (N--) {
if (cnt++) cout << endl;
cin >> n >> t[0] >> t[1] >> t[2] >> t[3] >> t[4] >> Q;
getchar();
var.clear();
string str;
all.resize(n + 1);
for (int i = 1; i <= n; ++i)
while (getline(cin, str)) {
all[i].push_back(str);
if (str == "end") break;
}
for (int i = 1; i <= n; ++i) ready.push_back(i);
while (!ready.empty()) {
int T = Q;
int id = ready.front();
ready.pop_front();
while (1) {
string s = all[id].front();
all[id].pop_front();
int ret = sen_id(s, id, T);
if (ret == -1 || ret == 0) break;
if (T <= 0) {
ready.push_back(id);
break;
}
}
}
}
}
相關推薦
演算法競賽入門經典第六章例題6-1 Concurrency Simulator UVA
#include<iostream> #include<string> #include<deque> #include<vector> #inclu
算法入門經典第六章 例題6-5 移動盒子
stl 是否 %d 編號 ret 特殊 第六章 沒有 big 例題 6-5 移動盒子(Boxes in a Line, UVa127675) 問題 給定一行盒子,從左到右編號依次為1,2,...,n.可以執行以下命令: 1 X Y 把盒子 X 移動到 Y 的左邊(如果已經在
算法入門經典第六章 例題6-14 Abbott的復仇(Abbott's Revenge)BFS算法實現
alt es2017 算法實現 wid tro 最短 inpu ges ews Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF *
算法入門經典第六章 例題6-15 給任務排序
訪問 images 技術 pan 是什麽 style efi 開始 max 假設有n個變量,還有m個二元組(u,v),分別表示變量u小於v。那麽,所有變量從小到大排列起來應該是什麽樣子呢?例如,有4個變量a,b,c,d,若已知a<b,c<b,d<c,
演算法競賽入門經典第四章習題4-4 Cube painting UVA
#include<iostream> #include<string> #include<cstring> #pragma warning(disable:499
演算法競賽入門競賽 入門經典 第六章 個人記錄
其他/抱怨: 一個暑假集訓四個星期,收穫有,但是很少,大概把所講的演算法瞭解了一下,但是也只是停留在瞭解這個層面。 基本就是——忘了。 就算暫時記住 但是一旦真正要用的時候就會出現這樣那樣的問題。BFS DFS都這樣何況其他。 反正……目前的狀態就是感覺壓力很大,各
使用檔案進行輸入輸出的兩種方式(演算法競賽入門經典第2章)
使用檔案進行輸入輸出的兩種方式: 1, 重定向 freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); 上述語句將使得scanf從檔案input.
演算法競賽入門經典第3章習題
3-1. 得分(UVa1585) 給出一個有O和X組成的串(長度為1~80),統計得分。每個O的得分為目前連續出現的O的個數,X的得分為0。例如,OOXXOXXOOO的得分是為1+2+0+0+1+0+0+1+2+3。按照題目說的做就行了,超簡單。
演算法競賽入門經典第三章3-4 Periodic Strings UVA
#include<iostream> #include<string> using namespace std; bool pd(string &s,int k)
演算法競賽入門經典第四章習題
習題4-1: 題目大意就是: 一個象棋殘局,紅方有n(2<=n<=7) 個棋子,黑方只有一個將,紅方除了帥,還可能有車,馬,炮,並且要考慮“蹩馬腿”,輸入所有棋子的位置,保證局面合法並且紅方已經將軍,判斷紅方是否已經將黑方將死, 解題思路: 用一個棋
演算法競賽入門經典 第3章 習題答案
習題3-1 分數統計 輸入一些學生的分數,哪個分數出現的次數最多?如果有多個並列,從小到大輸出。 任務1:分數均為不超過100的非負整數 任務2:分數均為不超過100的非負實數,但最多保留兩位小數 #include<stdio.h> #include<st
算法入門經典-第五章 例題6-10 下落的樹葉
說明 height 遍歷 ring ons 葉子 技巧 iostream 表示 給一顆二叉樹,每個節點都有一個水平位置:左子結點在它的左邊一個單位,右子節點在右 邊一個單位。從左向右輸出每個水平位置的所有節點的權值之和。如圖所示,從左到右的三 個位置權和分別為 7,11
算法入門經典-第七章 例題7-1 除法
abcde 輸入 表達式 c++ 技術分享 pan nbsp turn cnblogs 除法輸入正整數n,按從小到大的順序輸出所有形如abcde/fghij=n的表達式,其中a~j恰好為數字0~9的一個排列,2<=n<=79. 樣例輸入: 62 樣例輸出
[刷題]演算法競賽入門經典(第2版) 5-6/UVa1595
題意:平面上給若干點,問它們是不是關於某垂直於x軸的直線對稱。 程式碼:(Wrong Answer, –ms) //UVa1595 - Symmetry #include<iostream
演算法競賽入門經典第2版 第2章 迴圈結構
學習目標 掌握for迴圈、while迴圈、do-while迴圈的使用方法 學會使用計數器和累加器 學會用輸出中間結果的方法除錯 學會用計時函式測試程式效率 學會用重定向、fopen的方式讀寫檔案 瞭解演算法競賽對檔案讀寫方式和命名的嚴格性 記住變數在賦值之前的值是不確
算法入門經典-第五章 例題 5-5 集合棧計算機
urn cto str ack iostream 如果 tca cnblogs amp The SetStack Computer Time limit: 3.000 seconds 題目是這樣的: 有一個專門為了集合運算而設計的“集合棧”計算機。該機器有
算法入門經典-第五章 例題5-6 團體隊列
com ont func sam 移除 inpu 輸入 類型 隊列 題目背景 隊列和優先級隊列是大多數計算機科學家都知道的數據結構。但是團隊隊列卻不被人熟知,盡管在生活中經常出現。比如,午餐時間的食堂門口的隊列就是一個團隊隊列。在一個團隊隊列中,每個元素屬於一個團隊。如果一
算法入門經典-第五章 例題5-7 醜數
space names logs ins 是否 判斷 pop spa esp #include<iostream> #include<vector> #include<queue> #include<set> using n
算法入門經典-第七章 例題7-2-2 可重集的排列
int ati ret oid blog 入門經典 for class scan 可重:如果問題變成輸入數組p,並按字典序輸出數組A個元素的所有全排列,則需要修改代碼集的全排列 // Rujia Liu #include<cstdio> #
[刷題]演算法競賽入門經典(第2版) 4-7/UVa509
//UVa509 - RAID! #include<iostream> int d, s, b, t, times = 0; char disk_data[7][6666], type; inline char* disk(int x, i