Codeforces 993C. Careful Maneuvering(详细注解)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces 993C. Careful Maneuvering(详细注解)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
解題思路
代碼
#include <bits/stdc++.h> using namespace std; typedef long long ll;//輸入 int a[100];int b[100]; //mp存a[i]+b[j]放在set數(shù)組的第幾個位置 map <int,int> mp; //k表示set數(shù)組中有效數(shù)據(jù)的長度 int k = 0; set<int> sl[20010],sr[20010],sll,srr; set<int>::iterator it; int main(){ios::sync_with_stdio(false);int n,m;cin >> n >> m;for(int i = 1;i <= n; ++i) cin >> a[i];for(int i = 1;i <= m; ++i) cin >> b[i];for(int i = 1;i <= n; ++i){for(int j = 1;j <= m; ++j){//如果a[i]+b[j]沒出現(xiàn)過就給一個新的set //否則,就將這兩個元素插入舊的set if(mp[a[i]+b[j]] == 0){mp[a[i]+b[j]] = ++k;sl[k].insert(i);sr[k].insert(j);} else{sl[mp[a[i]+b[j]]].insert(i);sr[mp[a[i]+b[j]]].insert(j);}}}int ans = 0;//W78的特判 if(k == 1){ans = sl[1].size()+sr[1].size();cout << ans << endl;return 0;}//將任意兩個不同的set合并,兩個set的大小之和即為這兩個點能摧毀的飛行船的數(shù)量。 for(int i = 1;i <= k; ++i){for(int j = i+1;j <= k; ++j){sll = sl[i];srr = sr[i];for(it = sl[j].begin();it != sl[j].end(); it++){sll.insert(*it); }for(it = sr[j].begin();it != sr[j].end(); it++){srr.insert(*it); }ans = max(ans, (int)(sll.size()+srr.size()));}}cout << ans << endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的Codeforces 993C. Careful Maneuvering(详细注解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 993A. Two
- 下一篇: 【复习资料】设计模式