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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces 993C. Careful Maneuvering(详细注解)

發布時間:2024/4/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 993C. Careful Maneuvering(详细注解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題思路

  • -100和+100是沒有用的,只要知道左邊的飛船軸和右邊的飛船軸離y軸一樣近即可。為簡單起見,我們將左邊的軸設為-1,右邊的設為1。
  • 某個點能摧毀的飛船一定是因為有兩個飛船關于這個點對稱。即若(-1,y1)和(1,y2)能互相摧毀,說明他們關于(0,(y1+y2)/2)對稱。
  • 所以我們只用求出左邊的點y1與右邊的點y2的和y1+y2。((y1+y2)/2為對稱點,為了消除小數,我們不除以2)
  • 記錄每個y1+y2的值能消除左邊的點的位置,和右邊的點的位置。
  • 找到兩個不同的y1+y2,將他們能消除的左右邊的位置分別合并,用(左邊的數量+右邊的數量)更新ans即可。
  • 代碼

    #include <bits/stdc++.h> using namespace std; typedef long long ll;//輸入 int a[100];int b[100]; //mp存a[i]+b[j]放在set數組的第幾個位置 map <int,int> mp; //k表示set數組中有效數據的長度 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]沒出現過就給一個新的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的大小之和即為這兩個點能摧毀的飛行船的數量。 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; }

    總結

    以上是生活随笔為你收集整理的Codeforces 993C. Careful Maneuvering(详细注解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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