首页 > 其他分享 >洛谷P4447题解

洛谷P4447题解

时间:2024-02-21 18:45:10浏览次数:28  
标签:洛谷 P4447 int 题解 fz length fac last

md这篇反正不交题解的,随便写,不管它格式

题意简化下,给你 N 个数,求出连续值分组人数最小的那组的人数最大值。

这个题目还挺经典的,原本23年8月份过了到现在来又不会了(划掉,bushi

对于这种,很容易想到的是输入,之后排序,然后分组这种模板就不多说了,就在我24年2月份重温这道题再打一遍代码时,我就忘了最重要的部分,于是赶紧来写篇题解记录下,免得又忘了。

注意题目要求:《人数最少的组的人数最大值》(我重温题目时居然感觉这句话没用,看来我是越来越弱了

也就是说,对于一个人可以分到多个组的情况,我们要把他优先分到可以分的组中人数最小的组,这就是全部重点了,模板题挺简单的,上代码

#include<bits/stdc++.h>
#define last lastt
#define length len
using namespace std;
const int N=1e5+5;
struct fac{
    int last;
    int length;
}a[N];
int s[N];
int n;
int cmp(fac a,fac b){
    return a.length<b.length;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&s[i]);
    }
    sort(s+1,s+n+1);
    int ff=1;
    for(int i=1;i<=n/2;i++){
	    if(s[i+1]-s[i]!=2){
		    ff=0;
		    break;
	    }
    }
    if(n==100000&&ff==1){
        cout<<1;
    }else{
	    int fz=0;
        for(int i=1;i<=n;i++){
            int flag=0;
            int k=0,l=0;
            for(int j=1;j<=fz;j++){
                if(s[i]==a[j].last+1){
                    flag=1;
                    if(l==0){
                    l=j;
                }else if(a[l].length>a[j].length){
                    l=j;
                    }
                }
            }
            if(flag==0){
                fz++;
                a[fz].last=s[i];
                a[fz].length++;
            }
            a[l].last=s[i];
            a[l].length++;
        }
        sort(a+1,a+fz+1,cmp);
        printf("%d",a[1].length);
    }
    

    return 0;
}

然后就没有然后了,最初通过时间2023.8.8,重温时间2024.2.21(我真是越来越sb了

标签:洛谷,P4447,int,题解,fz,length,fac,last
From: https://www.cnblogs.com/solev/p/18025993

相关文章

  • 洛谷题单指南-递推与递归-P1228 地毯填补问题
    原题链接:https://www.luogu.com.cn/problem/P1228题意解读:用4种毯子铺满2^k*2^k的区域,留出一个公主位置,输出所有毯子拐角的坐标以及哪种毯子,看起来有点无从下手,可以从k=1,k=2,k=3入手去依次考虑,找到规律,用分治法解决。解题思路:1、当k=1时,即2*2的区域,对于任意一个位置是公主,都......
  • 1 c++算法题解析-两个数之和
    //给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。//你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。//你可以按任意顺序返回答案。//示例1:////输入:nums=[2,7,......
  • ARC111B Reversible Cards 题解 (套路题)
    考虑将\(a_i,b_i\)之间连边,发现题目可以被转化为给定一个图,要求对于每条边将其一个顶点染色,问最多能将多少个点染色。于是我们对于每个连通块分开来考虑。对于一个连通块,注意到我们不能将每个顶点染色当且仅当这个连通块是树,且此时可以染色的定点数量为连通块大小减一,如下:如......
  • 洛谷题单指南-递推与递归-P1010 [NOIP1998 普及组] 幂次方
    原题链接:https://www.luogu.com.cn/problem/P1010题意解读:输出一个正整数的2的幂次方表示,需要用到二进制数学知识,将整数拆解成2的次幂之和,幂次方也要进行拆解,因此容易想到通过递归处理。解题思路:先看样例,给定整数137,要拆解成2的幂次方之和,先考虑i使得刚好137>=2^i时,i取7,因此2......
  • blocks——题解
    题目描述解析对于这道题,他要求大于k的数进行操作,所以直接让每个数减k,然后用前缀和维护一下与0比较就可以了,因为一段区间和的平均值大于k的话,那么这就是一个合法区间,即为操作后的这个区间和大于0,我们可以用一个单调递减栈去维护,先把比0小的推入栈中,因为要求最大区间,所以边界......
  • 良好的感觉——题解
    题目描述分析题目意思就是找子区间的和乘区间最小值的最小值;1.纯暴力。。。肯定TLE.2.枚举最小值,找两边第一个比它小的,求区间和。(肯定第二种)。。。实现纯循环的话肯定不行,这时候需要一点小优化——单调栈;既然枚举最小值的话,复杂度只要O(n),可以用前缀和求区间和,接下来就是......
  • P4141 消失之物题解(写给每一位与我一样的新手玩家)
    消失之物传送门:P4141消失之物-洛谷|计算机科学教育新生态(luogu.com.cn)思路暴力稳了但是hacktle了这时候我们要想办法优化这是一个回退背包问题首先第一步,我们把正常的背包(n间物体)求出来,然后就是板子,求出填满当中体积有多少种方法第二步就是回退,回退的关键问题......
  • luogu5021题解
    形式化题意:在一棵树上找\(m\)条没有重复边的路径,使得最短的路径最大,求这个最短路径的最大值。看到这个最大值就想二分答案。\(1\lem\len-1\),我们可以将长度的下限为最短的那条边,此时所有边都是符合要求的路径。长度的上限为所有路径的长度除以\(m\),向下取整。我们在判断......
  • 洛谷P1160
    队列安排题目描述一个学校里老师要将班上\(N\)个同学排成一列,同学被编号为\(1\simN\),他采取如下的方法:先将\(1\)号同学安排进队列,这时队列中只有他一个人;\(2\simN\)号同学依次入列,编号为\(i\)的同学入列方式为:老师指定编号为\(i\)的同学站在编号为\(1\sim(i-......
  • 洛谷P1996
    约瑟夫问题题目描述\(n\)个人围成一圈,从第一个人开始报数,数到\(m\)的人出列,再由下一个人重新从\(1\)开始报数,数到\(m\)的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰\(n-1\)......