当前位置: 代码迷 >> 综合 >> 假期集训 ——Boats Competition 赛艇codeforses #1399c(双指针+思维)
  详细解决方案

假期集训 ——Boats Competition 赛艇codeforses #1399c(双指针+思维)

热度:91   发布时间:2024-01-12 23:55:39.0

今天再一次体会到双指针的精妙之处,还是因为太菜了,哭了。

//Boats Competition 赛艇
//来源codeforses #1399c
//双指针:一个指针指向两个值的和,另一个指针指向其中一个值
//题中包含一个道理:a与b配对,现在假设有三个a,有两个b,那么就能构成两对组合#include<bits/stdc++.h>
using namespace std;map<int,int> m;
int main(){
    int t,n,maxz=0;cin>>t;while(t--){
    m.clear();maxz=0;cin>>n;int w[n];//存储每个值对应的个数for(int i=0;i<n;i++){
    cin>>w[i];m[w[i]]++;} //双指针//由于不能确定总和sum为多少时,构成的对数最多,由于数据范围很小,所以可以一个一个试//又由于wi不超过50,所以可以直接从1遍历到50//统计了两次对数,最后结果除以2for(int i=2;i<=100;i++){
    int s=0;for(int j=1;j<=50;j++){
    s+=min(m[j],m[i-j]);}maxz=max(maxz,s);}cout<<maxz/2<<endl;}
}