CCF CSP201903-4訊息傳遞介面(c++100)
CCF CSP201903-4訊息傳遞介面
思路看註釋
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
const int maxn = 10010;
vector<int>G[maxn];
int send[maxn] = {0};
int main(){
int T,n;
cin>>T>>n;
cin.get();
for(int i = 0; i < T; i++){
bool flag = false;
memset(send,-1,sizeof(send));
//每次處理n個程式,R為10000+num,與S分開
for(int j = 0; j < n; j++){
string s;
getline(cin,s);
for(int k = 0; k < s.size(); k++){
if(s[k]=='R'){
int num = 0;
while(k+1 < s.size() && s[k+1] >= '0' && s[k+1] <= '9'){
k++;
num = num*10 + s[k] - '0';
}
G[j].push_back(num+10000);
}
else if(s[k] == 'S'){
int num = 0;
while(k+1 < s.size() && s[k+1] >= '0' && s[k+1] <= '9'){
k++;
num = num*10 + s[k] - '0';
}
G[j].push_back(num);
}
}
}
//處理完一個刪一個,每次都只處理0號資料並且小於10000;
//send指令器中只能有一個命令,必須匹配才能完成命令
while(1){
flag = false;
int count = 0;
for(int j = 0; j < n; j++){
if(send[j]==-1&&G[j].size() > 0){
if(G[j][0] >= 10000 && send[G[j][0]-10000] == j){
send[G[j][0]-10000] = -1;
}
else if(G[j][0] < 10000 && send[G[j][0]] == j+10000){
send[G[j][0]] = -1;
}
else send[j] = G[j][0];
G[j].erase(G[j].begin());
flag = true;
}
}
//指令器為空表示全部處理完,沒有死鎖
for(int j = 0; j < n; j++){
if(send[j] == -1){
count++;
}
}
if(count==n){
flag = true;
break;
}
//若沒有進行指令操作代表有死鎖
if(flag==false){
break;
}
}
if(flag){
cout<<0<<endl;
}
else{
cout<<1<<endl;
}
for(int j = 0; j < n; j++){
G[j].clear();
}
}
return 0;
}
相關文章
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- Android訊息傳遞之元件間傳遞訊息Android元件
- Flutter中訊息傳遞Flutter
- Chrome Extension 訊息傳遞Chrome
- flutter 訊息傳遞機制Flutter
- Handler訊息傳遞機制
- Apache Kafka訊息傳遞策略ApacheKafka
- Android訊息傳遞之Handler訊息機制Android
- 【轉】使用oracle pipe傳遞訊息Oracle
- QNX學習 -- API之訊息傳遞API
- C#視窗間傳遞訊息C#
- Spring Boot 參考指南(訊息傳遞)Spring Boot
- Aeron訊息傳遞客戶端--Go版客戶端Go
- Java中用Aeron實現UDP訊息傳遞JavaUDP
- Android Handler訊息傳遞機制詳解Android
- objc系列譯文(7.4):訊息傳遞機制OBJ
- Pulsar 入門實戰(1)--Pulsar 訊息傳遞
- Android之Handler訊息傳遞機制詳解Android
- RabbitMQ 和訊息傳遞常用一些術語MQ
- NATS訊息傳遞與REST效能比較 | VinsguruREST
- 基於WebSocket的實時訊息傳遞設計Web
- Android訊息傳遞之EventBus 3.0使用詳解Android
- uc/os-iii學習筆記-訊息傳遞筆記
- 深度解析VC中的訊息傳遞機制(上)
- 深度解析VC中的訊息傳遞機制(下)
- 新增的WebSphere MQ訊息傳遞提供程式簡介WebMQ
- .NET 8 中利用 MediatR 實現高效訊息傳遞
- CCF CSP 201703-2學生排隊(c++100)C++
- OC isa結構、訊息傳遞、Method Swizzling
- 執行緒通訊機制:共享記憶體 VS 訊息傳遞執行緒記憶體
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- android 訊息傳遞機制進階EventBus的深入探究Android
- Android Handler訊息傳遞機制:圖文解析工作原理Android
- 跨共識訊息格式XCM有幾種傳遞機制?
- Laravel集合探學系列——高階訊息傳遞實現(二)Laravel
- BYOD時代,如何在企業中保護移動訊息傳遞?
- 在ASP.NET Core 中使用 .NET Aspire 訊息傳遞元件ASP.NET元件