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:小清新签到题——题解相关推荐

  1. 洛谷P3676 小清新数据结构题(动态点分治)

    题面在这里>>> 解题思路: 开始写了个LCT后来发现是错的QAQ 正解是动态点分治. 对于一个点,其答案就是$\sum_{i=1}^{n}sum_{i}^{2}$ 很神奇地构造出这 ...

  2. [洛谷P3674]小清新人渣的本愿

    题目传送门 这道题是一道莫队题.对于每一种问法,就是查询对应的数是否在当前的区间内. 设$b[i]$表示莫队当前区间中有没有$i$这个数. 对于第一问"是否可以选出两个数它们的差为x&quo ...

  3. 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]

    传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  4. 洛谷 P3674 小清新人渣的本愿 bitset+莫队

    题目: https://www.luogu.org/problemnew/show/P3674 题目大意: 给你一个长度为 N N N的序列,每次询问[l,r]能不能取出两个数,和或差或积等于C&qu ...

  5. 洛谷 P3674 小清新人渣的本愿(莫队 +bitset)

    我们利用一个长度为 1e5 的 bitset,当数值 c 出现时,将 c 位置赋值为 1,对于题目要求的操作可以转变为 求 bitset 中存在两个位置相差为 x 的 1 这个比较难,如下图 bits ...

  6. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  7. 洛谷 P2186 小Z的栈函数

    洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...

  8. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  9. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

最新文章

  1. php 添加工信部链接,常见程序(wordpress,dede,discuz)网页下方添加备案号,添加链接跳转到工信部...
  2. Dockerizing a Node.js web app
  3. [攻防世界 pwn]——实时数据监测
  4. Android 使用jtds远程访问数据库
  5. Java进阶学习路线
  6. 如何在Spring 3.x中使用事件
  7. python的函数代码块_Python从菜鸟到高手(8):print函数、赋值与代码块
  8. MySQL 8.0 正式版发布,比 MySQL 5.7 快 2 倍!
  9. 如何开发一款高大上的android应用的必备知识
  10. 华为:三层交换机 命令示例
  11. 刚学的一招呵呵,愚人节到了,教个大家最强的整人方法
  12. 美赛数模论文之表的格式
  13. android一些可用实例2014收藏
  14. 判断图有无环_数读湾区经济潜能:基于大数据分析的环杭州湾大湾区“一体化”发展潜能!...
  15. duplicate designator is not allowedC/C++(2906)
  16. 女生适合学软件测试吗?这个工作压力大不大?
  17. Ardunio开发实例-PCF8563 RTC模块
  18. 机器学习中的度量指标:ROC曲线,AUC值,K-S曲线
  19. 【知乎高赞】软件测试工程师应该怎样规划自己?成为年薪30W+测试工程师(乾坤未定,皆是黑马)
  20. PMM使用Grafana告警

热门文章

  1. puppetmaster 、agent 证书管理相关
  2. File类与FileInfo类
  3. python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
  4. 一篇文章学会CORS
  5. spring源码解析系列之事件驱动模型架构
  6. 菜鸟学Linux 第095篇笔记 MySQL 5.6主从复制
  7. zabbix企业应用之centos7安装硬件监控
  8. javascrip对表格的操作(三)
  9. 发展需要大师,繁荣更需批评——GIS现状堪忧
  10. 如何使用QoS管理分配存储IOPS?