洛谷3672:小清新签到题——题解
https://www.luogu.org/problemnew/show/P3672
题目见上面。
参考:https://www.cnblogs.com/candy99/p/6582699.html
讲真我最开始真不知道求方案数有什么用。
f[i][j]表示i个数j个逆序对有多少种方案。
显然我们有f[i][j]=f[i-1][j]+f[i-1][j-1]+……+f[i-1][j-i+1]
(就相当于给一个比序列中所有数都大的数,让你往里插。)
于是令s[i][j]为前缀和,优化成f[i][j]=s[i-1][j]-s[i-1][j-i]。
同时注意f数组可能爆longlong,但是因为k<=1e13所以没必要那么多方案,当f[i][j]>k的时候统一换成INF就行。
然后我们枚举每一位可以放什么数,统计放这个数所造成的贡献c,以及之前可以放的数(但因为达不到k而被放弃)的方案数tmp。
则当f[i-1][x-c]+tmp>=k的时候就可以放这个数了。
#include<cmath> #include<queue> #include<vector> #include<cstdio> #include<cctype> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N=305; inline ll read(){ll X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } int ans[N],vis[N]; ll f[N][N*N/2],s[N][N*N/2]; int main(){int n=read();ll k=read();int x=read();f[0][0]=1;for(int i=0;i<=x;i++)s[0][i]=1;for(int i=1;i<=n;i++){for(int j=0;j<=x;j++){int l=max(0,j-i+1),r=j;ll tmp=(!l)?s[i-1][r]:s[i-1][r]-s[i-1][l-1];f[i][j]=min(tmp,k+1);s[i][j]=f[i][j]+(j?s[i][j-1]:0);}}for(int i=n;i>=1;i--){ll tmp=0;for(int j=1;j<=n;j++){if(!vis[j]){int c=j-1;for(int l=1;l<j;l++)c-=vis[l];if(f[i-1][x-c]+tmp>=k){ans[n-i+1]=j;vis[j]=1;x-=c;k-=tmp;break;}tmp+=f[i-1][x-c];}}}for(int i=1;i<=n;i++)printf("%d ",ans[i]);puts("");return 0; }
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
转载于:https://www.cnblogs.com/luyouqi233/p/9103900.html
洛谷3672:小清新签到题——题解相关推荐
- 洛谷P3676 小清新数据结构题(动态点分治)
题面在这里>>> 解题思路: 开始写了个LCT后来发现是错的QAQ 正解是动态点分治. 对于一个点,其答案就是$\sum_{i=1}^{n}sum_{i}^{2}$ 很神奇地构造出这 ...
- [洛谷P3674]小清新人渣的本愿
题目传送门 这道题是一道莫队题.对于每一种问法,就是查询对应的数是否在当前的区间内. 设$b[i]$表示莫队当前区间中有没有$i$这个数. 对于第一问"是否可以选出两个数它们的差为x&quo ...
- 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]
传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...
- 洛谷 P3674 小清新人渣的本愿 bitset+莫队
题目: https://www.luogu.org/problemnew/show/P3674 题目大意: 给你一个长度为 N N N的序列,每次询问[l,r]能不能取出两个数,和或差或积等于C&qu ...
- 洛谷 P3674 小清新人渣的本愿(莫队 +bitset)
我们利用一个长度为 1e5 的 bitset,当数值 c 出现时,将 c 位置赋值为 1,对于题目要求的操作可以转变为 求 bitset 中存在两个位置相差为 x 的 1 这个比较难,如下图 bits ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- 洛谷 P2186 小Z的栈函数
洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...
- 洛谷P5633 最小度限制生成树 题解
洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...
- 洛谷P2619 [国家集训队]Tree I 题解
洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...
最新文章
- php 添加工信部链接,常见程序(wordpress,dede,discuz)网页下方添加备案号,添加链接跳转到工信部...
- Dockerizing a Node.js web app
- [攻防世界 pwn]——实时数据监测
- Android 使用jtds远程访问数据库
- Java进阶学习路线
- 如何在Spring 3.x中使用事件
- python的函数代码块_Python从菜鸟到高手(8):print函数、赋值与代码块
- MySQL 8.0 正式版发布,比 MySQL 5.7 快 2 倍!
- 如何开发一款高大上的android应用的必备知识
- 华为:三层交换机 命令示例
- 刚学的一招呵呵,愚人节到了,教个大家最强的整人方法
- 美赛数模论文之表的格式
- android一些可用实例2014收藏
- 判断图有无环_数读湾区经济潜能:基于大数据分析的环杭州湾大湾区“一体化”发展潜能!...
- duplicate designator is not allowedC/C++(2906)
- 女生适合学软件测试吗?这个工作压力大不大?
- Ardunio开发实例-PCF8563 RTC模块
- 机器学习中的度量指标:ROC曲线,AUC值,K-S曲线
- 【知乎高赞】软件测试工程师应该怎样规划自己?成为年薪30W+测试工程师(乾坤未定,皆是黑马)
- PMM使用Grafana告警