多校联考4

 

rank:151 mark:60

总之,考的很差劲,再接再厉!!!

题纲:

T1:思维+贪心思想
T2:三分求三分函数答案+数形结合证明单调性
T3:manacher求最长回文串+线段覆盖问题(最少线段完全覆盖)
T4:贪心+归并思想(或者dijstra思想)

 

T1:

有n个堡垒需要攻打,攻打每个堡垒需要x个士兵,y个会阵亡,没阵亡的可以去攻打其他堡垒,问最少派遣的士兵数量

贪心,按照x-y排个序,剩的多的排前面

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<iomanip>
#include<bitset>
#include<map>
#include<queue>
#include<deque>
#include<vector>
#define _f(i,a,b)  for(register int i=a;i<=b;++i)

#define f_(i,a,b)  for(register int i=a;i>=b;--i)
#define ll long long
#define INF 1000000000

#define chu printf
//太大会炸

using namespace std;
inline ll re()
{
    ll x = 0, f = 1;
    char ch = getchar();
    while(ch > '9' || ch < '0')
    {
        if(ch == '-')
        {
            f = -1;
        }
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = (x << 1) + (x << 3) + (ch^48);
        ch = getchar();
    }
    return x * f;
}
const int N=100000+100;
ll t,n;
struct node
{
    ll a,b,c;
}e[N];
int a[N];
bool cmp(node aa,node bb)
{
    return aa.c>bb.c;
}
inline ll getans()
{
    ll ans=e[1].b;ll tmp=0;
        _f(i,2,n)
        {
            if(e[i].b-(e[i-1].c+tmp)<0)//如果给的太多了
            {

                    tmp+=e[i-1].c-e[i].b;//剩下的备用

            }
            else
            {
                ans+=(e[i].b-e[i-1].c-tmp);
                tmp=0;
            }
        }
        return ans;
}
int  main()
{
  // freopen("a.txt","r",stdin);
   // freoepn("","w",stdout);
    t=re();
    _f(t_p,1,t)
    {
        n=re();
        _f(i,1,n)e[i].a=re(),e[i].b=re(),e[i].c=e[i].b-e[i].a,a[i]=i;
        sort(e+1,e+1+n,cmp);
        ll anse=getans();
        chu("%lld\n",anse);

    }
    return 0;
}
/*
2
2
4 7
1 5
3
1 4
4 6
3 5


1
2
4 7
1 5

1
4
4 7
1 1
3 5
4 6

1
9
460466601 802805961
104273261 108738217
102351381 411885879
296029105 952513369
604571752 911815892
790909345 796548981
430391828 512531288
169930216 375266439
276432564 774360399



*/
View Code

T2

定义一个数列虚弱程度是子序列(mx-mi)的最大值,(取绝对值),让这个数列同时减去一个数,使得虚弱程度最小

三分

posted on 2022-07-24 13:52  HZOI-曹蓉  阅读(30)  评论(1编辑  收藏  举报