JOI2007予選 問題5@C++(-20)
予選当日はいちいち更新キューとか作ってやった気がする。馬鹿だったなあ自分。
#include <cstdio> #include <algorithm> #include <vector> using namespace std; struct item_pair { int battery; int motor; int cable; item_pair(int battery,int motor,int cable) : battery(battery),motor(motor),cable(cable) {} }; int main(int argc,char* argv[]) { int batteries_count,motors_count,cables_count; scanf("%d %d %d\n",&batteries_count,&motors_count,&cables_count); vector<int> items(batteries_count+motors_count+cables_count,2); int n; scanf("%d\n",&n); vector<item_pair> results_0; for(int i=0;i<n;i++) { int battery,motor,cable,result; scanf("%d %d %d %d\n",&battery,&motor,&cable,&result); battery--; motor--; cable--; if(result==1) { items[battery]=items[motor]=items[cable]=1; } else { results_0.push_back(item_pair(battery,motor,cable)); } } for(unsigned int i=0;i<results_0.size();i++) { const item_pair& c=results_0[i]; int& bresult=items[c.battery]; int& mresult=items[c.motor]; int& cresult=items[c.cable]; if(bresult==1 && mresult==1) { cresult=0; } else if(bresult==1 && cresult==1) { mresult=0; } else if(mresult==1 && cresult==1) { bresult=0; } } for(unsigned int i=0;i<items.size();i++) { printf("%d\n",items[i]); } return 0; }