第一题, 暴力。。。。
#include <iostream> #include <vector> using namespace std; bool helper(const vector<int> &a, const vector<int> &b, const vector<int> &c) { int W[10] = {0}; W[1] = W[4] = W[7] = 1; int B[10] = {0}; B[2] = B[5] = B[8] = 1; int T[10] = {0}; T[3] = T[6] = T[9] = 1; int cnt = 0; for (auto i : a){ if (W[i] == 1){ --W[i]; ++cnt; } } for (auto i : b){ if (B[i] == 1){ --B[i]; ++cnt; } } for (auto i : c){ if (T[i] == 1){ --T[i]; ++cnt; } } return cnt >= 7; } int main() { int len; cin >> len; while (len--){ vector<int> W, B, T; for (int i = 0; i < 7; ++i){ string s; cin >> s; if (s.size() != 2) continue; if (s.back() == 'W'){ W.push_back(s[0] - '0'); } else if (s.back() == 'B'){ B.push_back(s[0] - '0'); } else if (s.back() == 'T'){ T.push_back(s[0] - '0'); } } if (helper(W, B, T) || helper(W, T, B) || helper(T, W, B) || helper(T, B, W) || helper(B, W, T) || helper(B, T, W)){ cout << "YES" << endl; } else{ cout << "NO" << endl; } } }
第二题, 暴力。。。。
#include <iostream> #include <vector> using namespace std; void pp(vector<vector<int>>& nums){ for(auto ii : nums){ for(auto i :ii){ cout<< i <<" "; } cout<<endl; } } void p(vector<int>& nums){ for(auto i :nums){ cout<< i <<" "; } cout<<endl; } void helper(vector<vector<int>>& nums){ if(nums.empty()) return; cout<<"------------------------"<<endl; pp(nums); int len = nums.size(); vector<int> row(len); vector<int> col(len); for(int i=0; i<len; ++i){ for(int j=0; j<len; ++j){ row[i] += nums[i][j]; } } for(int i=0; i<len; ++i){ for(int j=0; j<len; ++j){ col[i] += nums[j][i]; } } p(row); p(col); int mx = 0, r = 0, c = 0; for(int i=0; i<len; ++i){ for(int j=0; j<len; ++j){ if(row[i] + col[j] - nums[i][j] > mx){ //cout<<"+"<<row[i] + col[j] <<" " << mx<<endl; //cout<<"*"<<i<<" "<<row[i]<<" "<<j<<" "<<col[j]<<" "<<mx<<endl;; mx = row[i] + col[j] - nums[i][j]; r = i; c = j; } } } cout<< r+1 << " " << c+1 <<endl; vector<vector<int>> newNums; for(int i=0; i<len; ++i){ if(i == r) continue; vector<int> line; for(int j=0; j<len; ++j){ if(j == c) continue; line.push_back(nums[i][j]); } newNums.emplace_back(line); } helper(newNums); } int main(){ int len; cin >> len; vector<vector<int>> nums(len); for(int i=0; i<len; ++i){ vector<int> line(len); for(int j=0; j<len; ++j){ int n; cin >> n; line[j] = n;; } nums[i] = std::move(line); } helper(nums); }第三题。。。。真不是暴力
#include <iostream> #include <unordered_map> #include <stack> #include <climits> using namespace std; int main() { int total; cin >> total; while(total--){ unordered_map<int, int> mp; // event_id, begin_time stack<pair<int, int>> stk; // begin_time, cost_time int id = INT_MAX; int mx = 0; int item; cin >>item; while(item--){ int t, e, s; cin >> t >> e >> s; if(s == 0){ mp.insert({e, t}); }else if(s == 1){ int curTotalTime = t - mp[e]; int curSelfTime = curTotalTime; while(!stk.empty() && stk.top().first > mp[e]){ curSelfTime -= stk.top().second; stk.pop(); } stk.push({mp[e], curTotalTime}); if(curSelfTime > mx){ mx = curSelfTime; id = e; }else if(curSelfTime == mx && e <id){ id = e; } } } cout<< id <<endl; } }
第四题,求大佬的代码
全部评论
(0) 回帖