日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zoj 3601

發布時間:2025/3/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zoj 3601 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接

[https://vjudge.net/contest/293343#problem/B]

題意

就是n男m女。然后給出他們喜歡那些人
再給出q次詢問
每次參加party的人
讓你找出某個人滿足喜歡在場的所有人而且在場所有人都不喜歡他
如果不存在輸出0;

分析

首先這題目的樣例是給出一個信息。就是他們可以搞基同性戀
就直接模擬就好了。關鍵怎樣模擬使得更高效,就是查找更高效
你得保存每個人喜歡的人。直接把名字映射成數字就好了
map<string,int> 名字對應的數字
vector a[] 為啥不用vector a[] 用來保存每個人喜歡的人
他喜歡的人還沒map過就gg了
下面為了更方便地查找你得
在把喜歡的關系映射一下、
map < pair<int,int>,int > P
后面舞會就查找了
給兩份代碼 一份是MLE的
具體看代碼吧

代碼

MLE

#include<bits/stdc++.h> using namespace std; #define ll long long map<string,int> ma; map<int,string> is; vector<string> ve[70000]; map<pair<int,int>,int > mp; int pa[70000]; int main(){int t,m,n,k,q;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&q);for(int i=0;i<n+m;i++){ve[i].clear();string l,bl;cin>>l;scanf("%d",&k);ma[l]=i,is[i]=l;//cout<<"i "<<i<<endl;for(int j=0;j<k;j++){cin>>bl;ve[i].push_back(bl);}}for(int i=0;i<n+m;i++)for(int j=0;j<ve[i].size();j++)mp[make_pair(i,ma[ve[i][j]])]=1;while(q--){scanf("%d",&k); string s;for(int i=0;i<k;i++){cin>>s;pa[i]=ma[s];}bool flag;for(int i=0;i<k;i++){flag=1;for(int j=0;j<k;j++){if(i!=j){if(mp[make_pair(pa[i],pa[j])]==0||mp[make_pair(pa[j],pa[i])]==1){flag=0; break;}}}if(flag) {printf("1 ");cout<<is[pa[i]]<<"\n";break;}}if(!flag) puts("0");}cout<<endl;}return 0; }

AC代碼

#include<bits/stdc++.h> using namespace std; #define ll long long map<string,int> ma; map<int,string> is; vector<string> ve[70000]; map<pair<int,int>,int > mp; string str[70000]; int pa[70000]; int main(){int t,m,n,k,q;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&q);mp.clear();ma.clear();for(int i=0;i<n+m;i++){ve[i].clear();string l,bl;cin>>l;scanf("%d",&k);ma[l]=i;for(int j=0;j<k;j++){cin>>bl;ve[i].push_back(bl);}}for(int i=0;i<n+m;i++)for(int j=0;j<ve[i].size();j++)mp[make_pair(i,ma[ve[i][j]])]=1;while(q--){scanf("%d",&k); string s;for(int i=0;i<k;i++){cin>>str[i];pa[i]=ma[str[i]];}bool flag;for(int i=0;i<k;i++){flag=1;for(int j=0;j<k;j++){if(i!=j){if(mp[make_pair(pa[i],pa[j])]==0||mp[make_pair(pa[j],pa[i])]==1){flag=0; break;}}}if(flag) {cout<<1<<" "<<str[i]<<"\n";break;}}if(!flag) puts("0");}puts("");}return 0; }

轉載于:https://www.cnblogs.com/mch5201314/p/10696803.html

總結

以上是生活随笔為你收集整理的zoj 3601的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。