Debate CodeForces - 1070F

本文介绍了一种算法,用于从支持不同候选人的观众中选择影响力最大的群体,同时确保至少一半的观众支持每个候选人。该算法首先选取同时支持两者的观众,然后平衡选择仅支持单一候选人的观众,最后在剩余观众中选择影响力最大的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Elections in Berland are coming. There are only two candidates — Alice and Bob.

The main Berland TV channel plans to show political debates. There are nn people who want to take part in the debate as a spectator. Each person is described by their influence and political views. There are four kinds of political views:

  • supporting none of candidates (this kind is denoted as "00"),
  • supporting Alice but not Bob (this kind is denoted as "10"),
  • supporting Bob but not Alice (this kind is denoted as "01"),
  • supporting both candidates (this kind is denoted as "11").

The direction of the TV channel wants to invite some of these people to the debate. The set of invited spectators should satisfy three conditions:

  • at least half of spectators support Alice (i.e. 2⋅a≥m2⋅a≥m, where aa is number of spectators supporting Alice and mm is the total number of spectators),
  • at least half of spectators support Bob (i.e. 2⋅b≥m2⋅b≥m, where bb is number of spectators supporting Bob and mm is the total number of spectators),
  • the total influence of spectators is maximal possible.

Help the TV channel direction to select such non-empty set of spectators, or tell that this is impossible.

Input

The first line contains integer nn (1≤n≤4⋅1051≤n≤4⋅105) — the number of people who want to take part in the debate as a spectator.

These people are described on the next nn lines. Each line describes a single person and contains the string sisi and integer aiai separated by space (1≤ai≤50001≤ai≤5000), where sisi denotes person's political views (possible values — "00", "10", "01", "11") and aiai — the influence of the ii-th person.

Output

Print a single integer — maximal possible total influence of a set of spectators so that at least half of them support Alice and at least half of them support Bob. If it is impossible print 0 instead.

Examples

Input

6
11 6
10 4
01 3
00 3
00 7
00 9

Output

22

Input

5
11 1
01 1
00 100
10 1
01 1

Output

103

Input

6
11 19
10 22
00 18
00 29
11 29
10 28

Output

105

Input

3
00 5000
00 5000
00 5000

Output

0

Note

In the first example 44 spectators can be invited to maximize total influence: 11, 22, 33 and 66. Their political views are: "11", "10", "01" and "00". So in total 22 out of 44 spectators support Alice and 22 out of 44 spectators support Bob. The total influence is 6+4+3+9=226+4+3+9=22.

In the second example the direction can select all the people except the 55-th person.

In the third example the direction can select people with indices: 11, 44, 55 and 66.

In the fourth example it is impossible to select any non-empty set of spectators.

题意

让你在n个人中选符合条件下,影响力最大。条件是两人支持人数都大于总人数的一半

思路

11必须选,01和10选相同个数互相抵消。

剩下的10或01 和00选11相同数量最大的

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
ll a[500000],b[500000],c[500000],d[1100000];
bool cmp(ll a,ll b)
{
    return a>b;
}
int main()
{
    ll n,m,i,j,x,num;
    scanf("%lld",&n);
    ll p1,p2,p3,p4;
    p1=p2=p3=p4=0;
    for(i=1;i<=n;i++)
    {
        scanf("%lld%lld",&x,&num);
        if(x == 11) a[p1++] = num;
        if(x == 10) b[p2++] = num;
        if(x == 1) c[p3++] = num;
        if(x == 0) d[p4++] = num;
    }
    ll ans = 0;
    for(i=0;i<p1;i++)
    {
        ans += a[i];
    }
    sort(b,b+p2,cmp);
    sort(c,c+p3,cmp);
    for(i=0;i<min(p2,p3);i++)
    {
        ans += b[i];
        ans += c[i];
    }
    for(i=min(p2,p3);i<p2;i++)
    {
        d[p4++] = b[i];
    }
    for(i=min(p2,p3);i<p3;i++)
    {
        d[p4++] = c[i];
    }
    sort(d,d+p4,cmp);
    for(i=0;i<min(p1,p4);i++)
    {
        ans += d[i];
    }
    printf("%lld\n",ans);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值