E2. Close Tuples (hard version)


题目大意:
给定一个长度为n的序列a,给定一个长度为n的序列a,给定一个长度为n的序列a,
要从中挑选一个m元组(ai1,ai2,ai3...aim)[i1<i2<i3....<im]要从中挑选一个m元组(ai_1,ai_2,ai_3...ai_m)[i_1 < i_2 < i_3....<i_m]要从中挑选一个m元组(ai1​,ai2​,ai3​...aim​)[i1​<i2​<i3​....<im​]满足:

问有多少种这样的组合?问有多少种这样的组合?问有多少种这样的组合?


解题思路:
首先我们不能被后面下标的限制所迷惑它只是想表达数字不能被重复选择而已,首先我们不能被后面下标的限制所迷惑它只是想表达数字不能被重复选择而已,首先我们不能被后面下标的限制所迷惑它只是想表达数字不能被重复选择而已,
那么我们可以把a数组进行排序,这样就好选一点,在排序好的数组中,我们那么我们可以把a数组进行排序,这样就好选一点,在排序好的数组中,我们那么我们可以把a数组进行排序,这样就好选一点,在排序好的数组中,我们
把对每个ai算一下贡献,但是我们为了不让序列重复统计我们可以这样把对每个ai算一下贡献,但是我们为了不让序列重复统计我们可以这样把对每个ai算一下贡献,但是我们为了不让序列重复统计我们可以这样

假设ai是长度为m的序列中的最大值,那么我们就可以从假设a_i是长度为m的序列中的最大值,那么我们就可以从假设ai​是长度为m的序列中的最大值,那么我们就可以从
[1,i−1]位置里面找到第一个aj使得aj≤ai&&ai−aj≤k所以我们就可以保证序列可以不被重复计算,假设那个位置是pos,那么我们要保证最大值一定要被选的情况下在[pos,i−1]里面挑m−1个数就可以了[1,i-1]位置里面找到第一个a_j使得a_j\leq a_i\&\&ai-aj \leq k所以我们就可以保证序列可以不被重复计算,假设那个位置是pos,那么我们要保证最大值一定要被选的情况下在[pos,i-1]里面挑m-1个数就可以了[1,i−1]位置里面找到第一个aj​使得aj​≤ai​&&ai−aj≤k所以我们就可以保证序列可以不被重复计算,假设那个位置是pos,那么我们要保证最大值一定要被选的情况下在[pos,i−1]里面挑m−1个数就可以了
ans=∑i=1nCi−posm−1ans=\sum_{i=1}^{n} C_{i-pos}^{m-1}ans=i=1∑n​Ci−posm−1​


#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>using namespace std;const int mod = 1e9+7;
const int N = 200010;#define ll long longint n, T;
int a[N];
int m, k;ll quick_pow(int a,int b)
{ll res = 1;while(b){if(b&1) res=res*a%mod;a=(ll)a*a%mod;b>>=1;}return res;
}ll C(int n, int m)
{if(n<m) return 0;ll up = 1, down = 1;for(int i=n;i>n-m;i--) up=up*i%mod;for(int i=1;i<=m;i++) down=down*i%mod;down = quick_pow(down,mod-2);return up*down%mod;
}int main()
{ios::sync_with_stdio(false);cin>>T;while(T--){cin>>n>>m>>k;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+n+1);ll ans = 0;for(int i=1;i<=n;i++){int pos = lower_bound(a+1,a+i+1,a[i]-k) - a;ans = (ans + C(i - pos, m - 1))%mod;}cout<<ans<<endl;}return 0;
}

D. Circle Game


题目大意:
就是给你一个圆形状的区域,两个人从(0,0)点开始每次移动一个棋子向上或者向右移动k步,最后谁把就是给你一个圆形状的区域,两个人从(0,0)点开始每次移动一个棋子向上或者向右移动k步,最后谁把就是给你一个圆形状的区域,两个人从(0,0)点开始每次移动一个棋子向上或者向右移动k步,最后谁把棋子移动出了圆形区域就输了,问你最后是谁赢了棋子移动出了圆形区域就输了,问你最后是谁赢了棋子移动出了圆形区域就输了,问你最后是谁赢了


解题思路:
1.通过观察可以知道这是一个对称博弈那么我们只要考虑中间对角线的位置的胜负状态因为x和y都是增加,如果对角线是必败态那么先手必定会远离,但是后手会尽可能的去靠近对角线,1.通过观察可以知道这是一个对称博弈那么我们只要考虑中间对角线的位置的胜负状态因为x和y都是增加,如果对角线是必败态那么先手必定会远离,但是后手会尽可能的去靠近对角线,1.通过观察可以知道这是一个对称博弈那么我们只要考虑中间对角线的位置的胜负状态因为x和y都是增加,如果对角线是必败态那么先手必定会远离,但是后手会尽可能的去靠近对角线,
2.同理可得2.同理可得2.同理可得
那么我们只要判断对角线上的最后的点的状态:那么我们只要判断对角线上的最后的点的状态:那么我们只要判断对角线上的最后的点的状态:


#include <bits/stdc++.h>using namespace std;
typedef long long ll;
int T;
ll d, k;
int main() {cin >> T;while(T--) {cin >> d >> k;ll x = 0;while(2ll * (x + k) * (x + k) <= d * d) x += k;//判断最靠近边界的状态if((x + k) * (x + k) + x * x <= d * d) {printf("Ashish\n");} else {printf("Utkarsh\n");}}return 0;
}

codeforces1700数学:E2. Close Tuples (hard version)[组合计数 逆向统计] D. Circle Game[对称博弈考虑对称状态的胜负]相关推荐

  1. Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理

    传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...

  2. 数学知识——组合计数

    组合计数 文章目录 组合计数 概述 动态规划 牡牛和牝牛 思路 代码 隔板法 方程的解 思路 代码 序列统计 思路 代码 加法 & 乘法原理 加法原理 乘法原理 车的摆放 思路 代码 容斥原理 ...

  3. 《算法竞赛进阶指南》数论篇(3)-组合计数,Lucas定理,Catalan数列,容斥原理,莫比乌斯反演,概率与数学期望,博弈论之SG函数

    文章目录 组合计数 例题:Counting swaps Lucas定理 Cnm≡Cnmodpmmodp∗Cn/pm/p(modp)C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ ...

  4. 《数据库系统原理及应用教程》(苗雪兰等,第五版) 实验五:数据库的组合查询和统计查询实验

    阅读前注意: 1. 本实验报告配套<数据库系统原理及应用教程>(苗雪兰等,第五版) 实验五:数据库的组合查询和统计查询实验(书上10.4节以及第六章部分内容),书本中采用Microsoft ...

  5. 基础组合计数常用的概念和方法总结

    基础组合计数常用的概念和方法总结 一.组合计数中的基本概念与性质 1.排列 定义 性质 2.组合 定义 性质 二.组合计数中的一些常用技巧 1.容斥原理 定义 公式 2.捆绑与插空法 捆绑法 插空法 ...

  6. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. mysql中实现分类统计查询的步骤_实验07:数据库的组合查询和统计查询

    实验6:数据库的组合查询和统计查询实验 本实验需要 4 学时. 一.实验目的 使学生熟练掌握SQL Server 查询分析器的使用方法,加深对SQL 和Transact-SQL 语言的查询语句的理解. ...

  9. CF1237F Balanced Domino Placements(组合计数,dp)

    CF1237F Balanced Domino Placements Solution 显然可以先考虑横着的骨牌,再考虑竖着的骨牌.但是思路卡在了选取横着的骨牌会对竖着的骨牌的相邻对数产生影响. 然而 ...

最新文章

  1. python三大主流框架的对比
  2. 运行startup.bat的启动过程
  3. FXRibbon 1.2版发布
  4. 《TCP/IP Sockets 编程》笔记5
  5. 【EOJ Monthly 2019.02 - E】中位数(二分 ,中位数 ,−1/1变换,dp求解DAG最长路)
  6. 关于ubuntu 是否需要使用std::到问题。
  7. QString::arg()//用字符串变量参数依次替代字符串中最小数值
  8. docker network 网络模式
  9. C++中字符串转换函数to_string
  10. tensorflow保存和恢复模型saver.restore
  11. PyCharm设置Python版本
  12. 加油吧 少年(励志)
  13. 网站后台爆破工具:WebCrack
  14. oracle表空间配额和unlimited tablespace权限
  15. go开发报 A required privilege is not held by the client 错误
  16. 如何制作价目表制作报价单
  17. linux内核启动过程和启动第一个应用程序
  18. 敏捷宣言的内容及准则
  19. 在你的项目中集成 Android pay支付
  20. 计算机房维护登记表,机房运维值班记录表.doc

热门文章

  1. 机器视觉应用软件开发步骤及流程
  2. mapreduce工作流程
  3. MVC Html.ActionLink Area 链接中含区域的页面之间的跳转
  4. IEEE signal processing letters 投稿经验
  5. Java基础--定时任务Timer
  6. 《Kotlin极简教程》第三章 Kotlin基本数据类型
  7. 接Window服务(二)
  8. 链表面试题Java实现【重要】
  9. linux 下网络流量监控
  10. 关于android设备唯一区分device id的取得