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元件
- Flutter中訊息傳遞Flutter
- Chrome Extension 訊息傳遞Chrome
- flutter 訊息傳遞機制Flutter
- Handler訊息傳遞機制
- Apache Kafka訊息傳遞策略ApacheKafka
- Spring Boot 參考指南(訊息傳遞)Spring Boot
- QNX學習 -- API之訊息傳遞API
- Java中用Aeron實現UDP訊息傳遞JavaUDP
- CCF CSP 201703-2學生排隊(c++100)C++
- NATS訊息傳遞與REST效能比較 | VinsguruREST
- Android之Handler訊息傳遞機制詳解Android
- Pulsar 入門實戰(1)--Pulsar 訊息傳遞
- RabbitMQ 和訊息傳遞常用一些術語MQ
- .NET 8 中利用 MediatR 實現高效訊息傳遞
- 基於WebSocket的實時訊息傳遞設計Web
- Android Handler訊息傳遞機制:圖文解析工作原理Android
- android 訊息傳遞機制進階EventBus的深入探究Android
- Python程式專題8:分佈叢集的訊息傳遞Python
- Laravel集合探學系列——高階訊息傳遞實現(二)Laravel
- 在ASP.NET Core 中使用 .NET Aspire 訊息傳遞元件ASP.NET元件
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- 跨共識訊息格式XCM有幾種傳遞機制?
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- Rust 程式設計視訊教程(進階)——017_1 訊息傳遞 1Rust程式設計
- Rust 程式設計視訊教程(進階)——017_2 訊息傳遞 2Rust程式設計
- Rust 程式設計視訊教程(進階)——017_3 訊息傳遞 3Rust程式設計
- RabbitMQ 訊息的可靠投遞MQ
- BYOD時代,如何在企業中保護移動訊息傳遞?
- 訊息中介軟體—RocketMQ訊息傳送MQ
- InheritableThreadLocal 線上程池中進行父子執行緒間訊息傳遞出現訊息丟失的解析thread執行緒
- 從事件驅動程式設計模型分析Handler訊息傳遞機制事件程式設計模型
- Rust 程式設計影片教程(進階)——017_1 訊息傳遞 1Rust程式設計
- Rust 程式設計影片教程(進階)——017_2 訊息傳遞 2Rust程式設計
- Rust 程式設計影片教程(進階)——017_3 訊息傳遞 3Rust程式設計
- Apache Kafka訊息傳遞精確正好一次的含義 | TechMyTalkApacheKafka
- Apache Kafka和Spring Boot的容錯和可靠訊息傳遞 – Arnold GalovicsApacheKafkaSpring Boot
- 用於實時訊息傳遞和通知的 RabbitMQ 和 SpringBoot原始碼MQSpring Boot原始碼