首页 > 其他分享 >牛客小白月赛61 F 尺取法 前缀和

牛客小白月赛61 F 尺取法 前缀和

时间:2022-11-21 10:46:32浏览次数:53  
标签:61 int long 牛客 MAXN 小白月赛 sc include define

题目的描述是多维的 即有人数限制又有座位限制。

但是每次选座位是连续的,这意味着可以利用尺取法贪心的求出以每个左端点为起始最小的合法的右端点。

考虑如何求f(x) 即x人来满足的方案数 考虑一个区间 L,R可行那么 L-1,R也必然可行。

所以当前的L,R向左延申完全重复,只能向右延申可以发现延申至n这些方案均没有重复。

这样我们得到的方案是以每个左端点为起始的互不相同的方案可以发现覆盖所有情况。

code
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<ctime>
#include<cctype>
#include<queue>
#include<deque>
#include<stack>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 2000000000
#define inf 100000000000000000ll
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define putl(x) printf("%lld\n",x)
#define rep(p,n,i) for(int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define pii pair<int,int>
#define mk make_pair
#define P 1000000007ll
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define sq sqrt
#define l(x) s[x].l
#define r(x) s[x].r
#define S second
#define mod 1000000007
#define sc(A) scanf("%d",&A)
#define scs(A) scanf("%s",A);
#define put(A) printf("%d\n",A)
#define min(x,y) (x>=y?y:x)
#define max(x,y) (x>=y?x:y)
using namespace std;
const int MAXN=100010;
int len,n,m,sum;
int cnt[MAXN],w[MAXN];
int lin[MAXN],ver[MAXN],nex[MAXN];
inline void add(int x,int y)
{
	ver[++len]=y;
	nex[len]=lin[x];
	lin[x]=len;
}
inline void add1(int x)
{
	go(x)
	{
		++w[tn];
		if(w[tn]==1)++sum;
	}
}
inline void sub(int x)
{
	go(x)
	{
		--w[tn];
		if(!w[tn])--sum;
	}
}
int main()
{
	freopen("1.in","r",stdin);
	sc(n);sc(m);
	rep(1,m,i){int x;sc(x);add(x,i);}
	rep(1,m,i){int x;sc(x);add(x,i);}
	rep(1,m,i){int x;sc(x);add(x,i);}
	int R=0;
	for(int L=1;L<=n;++L)
	{
		while(sum!=m&&R<n)
		{
			++R;add1(R);
		}
		if(sum==m)++cnt[R-L+1],--cnt[R-L+1+n-R+1];
		sub(L);
	}
	rep(1,n,i)cnt[i]=(cnt[i]+cnt[i-1])%mod;
	int ans=0,w=1;
	rep(1,n,i)
	{
		w=(ll)w*i%mod;
		put_((ll)cnt[i]*w%mod);
	}
	return 0;
}

标签:61,int,long,牛客,MAXN,小白月赛,sc,include,define
From: https://www.cnblogs.com/chdy/p/16910621.html

相关文章

  • python(牛客)试题解析2 - 中等
    导航一、NC192二叉树的后序遍历二、NC117 合并二叉树三、求长度最长的的连续子序列使他们的和等于sum四、按顺序取出固定长度内容并合并两个数组为一个新数组五、输......
  • 牛客小白月赛 61 题解
    前言以下内容转自官方首先,十分抱歉给大家带来了不好的比赛体验,下面是比赛中出的大锅。锅1:B题是出题人在读CSAPP时想到的一道小模拟,但在题目描述时出了问题,应该......
  • 牛客小白月赛61 B柜台结账
    原题链接#include<stdio.h>#include<string.h>#include<stdlib.h>constintN=1e5+10;chara1[N],a2[N];//分别为a1和a2的字符串intlena,lenb;//分别为a1和a2的字......
  • LTC1861HMS#TRPBF LTC1861HMS模数转换器 12 bit 250ksps ADC
    LTC1860/LTC1861是12位A/D转换器,提供MSOP和SO-8包,并在单个5V电源上工作。在250ksps时,电源电流只有850μA。由于LTC1860/LTC1861在转换之间自动降低到典型的1nA电源电流,所......
  • python(牛客)试题解析1 - 简单
    导航:一、NC103反转字符串二、NC141判断是否为回文字符串三、NC151最大公约数四、NC65斐波那契数列五、字符按排序后查看第k个最小的字母六、数组内取出下标相同......
  • CF1610H Squid Game
    题面传送门首先定\(1\)为根节点,然后我们发现,如果全部的限制都是弯的,也就是\(x_i\)与\(y_i\)均不是两个点的LCA,则直接选择一个根节点就可以解决。然后如果全部限制都是直......
  • 《XY6761CA 4G核心板》采用了(ARM Mali-G71 GPU)都有哪些功能??
     《XY6761CA4G核心板》为深圳市新移科技有限公司基于联发科MT6761(曦力A22)平台自主研发的一款4G全网通芯片。内部构造功能相当给力,不仅功能强大,性能强劲,运算能力也强。真......
  • leetcode611
    有效三角形的个数Category Difficulty Likes Dislikesalgorithms Medium(53.27%) 447 -TagsCompanies给定一个包含非负整数的数组nums,返回其中可以组成三角形三条......
  • 61:continue语句
    ###continue语句continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层循环。【操作】要求输入员工的薪资,若薪资小于0则重新输入。......
  • Tomcat-CVE-2017-20615
    环境搭建:切换到vulhub对应目录docker-composebuilddocker-composeup-d漏洞产生原因Tomcat配置问题,配置了可写(readonly=false),导致我们可以往服务器写文件。  ......