1. 程式人生 > >演算法競賽入門經典第六章例題6-1 Concurrency Simulator UVA

演算法競賽入門經典第六章例題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