题目链接: https://vjudge.net/contest/237052#problem/H

这里给你一串数字,让你计算同时拥有这串数字最大值和最小值的子集(连续)和子序列(可以不连续)的数量,计算子串的数量是为了避免重复,我们可以从前往后扫描,前面的子集不能包括后面的,后面的可以包括前面的,我们每次记录最小值和最大值的位置t1,t2,起初把t1,t2设为0,每当遇到最大值或最小值是就把t1或t2的值变成最小值或最大值的下标,然后sum=sum+min(t1,t2),我也是刚刚看别人博客才知道的,举个例子:

2 1 4 3 2 1   min=1,max=4,t1=0,t2=0;

i=1, t1=0,t2=0,sum=min(0,0)+sum=0;

i=2, t1=2,t2=0,sum=min(2,0,)+sum=0;

i=3, t1=2,t2=3,sum=min(2,3)+sum=2,有2 1 4和1 4

i=4, t1=2,t2=3,sum=min(2,3)+sum=4, 有2 1 4 3和1 4 3

i=5, t1=2,t2=3,sum=min(2,3)+sum=6,有2 1 4 3 2和1 4 3 2

i=6, t1=6,t2=3,sum=min(6,3)+sum=9,有2 1 4 3 2 1和1 4 3 2 1 和4 3 2 1

然后我们要求子序列的话可以用两种方法求,一种是排列组合,我们在上面求子集数量时同时求最大值和最小值的数量,因为可能会多次出现,分别设为min_num,max_num,那我们如果要用排列组合算的话就是(2^min_num-1)*(2^max_num-1)*2^(n-min_num-max_num),自己揣摩一下,然后用容斥原理的话就是所有情况-没有最大值的情况-没有最小值的情况+没有最大值和最小值的情况

看代码

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
const ll inf=0xffffff;
const ll mod=;
ll n,m,k,t;
ll num[];
ll cal(ll a,ll b)
{
ll ans=;
while(b)
{
if(b&)
ans=ans*a%mod;
a=a*a%mod;
b>>=;
}
return ans;
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
ll min1=inf,max1=,min_num=,max_num=;
ll sum1=,sum2=;
for(int i=;i<=n;i++)
{
cin>>num[i];
min1=min(min1,num[i]);
max1=max(max1,num[i]);
}
if(min1==max1)
{
sum1=n*(n+)/%mod;
sum2=cal(,n)-;
cout<<sum1<<' '<<sum2<<endl;
continue;
}
ll t1=,t2=;
for(int i=;i<=n;i++)
{
if(min1==num[i])
{
t1=i;
min_num++;
}
if(max1==num[i])
{
t2=i;
max_num++;
}
sum1=(min(t1,t2)+sum1)%mod;
}
sum2=((cal(,min_num)-)%mod*(cal(,max_num)-)%mod*cal(,n-max_num-min_num))%mod;//排列组合
/*sum2=(cal(2,n)-cal(2,n-max_num)-cal(2,n-min_num)+cal(2,n-max_num-min_num))%mod;//容斥原理
if(sum2<0)
sum2+=mod;*/
cout<<sum1<<' '<<sum2<<endl;
}
return ;
}

排列组合或容斥原理 SPOJ - AMR11H的更多相关文章

  1. 【专题】计数问题(排列组合,容斥原理,Prufer序列)

    [容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...

  2. hdu 4497 GCD and LCM 质因素分解+排列组合or容斥原理

    //昨天把一个i写成1了 然后挂了一下午 首先进行质因数分解g=a1^b1+a2^b2...... l=a1^b1'+a2^b2'.......,然后判断两种不可行情况:1,g的分解式中有l的分解式中 ...

  3. HDU 4497 GCD and LCM(分解质因子+排列组合)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...

  4. SPOJ - AMR11H Array Diversity (水题排列组合或容斥)

    题意:给定一个序列,让你求两种数,一个是求一个子序列,包含最大值和最小值,再就是求一个子集包含最大值和最小值. 析:求子序列,从前往记录一下最大值和最小值的位置,然后从前往后扫一遍,每个位置求一下数目 ...

  5. [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理)

    [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理) 题面 一个\(n \times n\)的格子,每个格子里可以填\([1,k]\)内的整数. ...

  6. [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)

    [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...

  7. GYM 101933K(二项式反演、排列组合)

    方法一 设\(f_i\)为最多使用\(i\)种颜色的涂色方案,\(g_i\)为恰好只使用\(i\)种颜色的涂色方案.可知此题答案为\(g_k\). 根据排列组合的知识不难得到\(f_k = \sum_ ...

  8. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  9. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

随机推荐

  1. djangobb之debug-toolbar查看其sql

    #djangobb之views show_forum(request, forum_id, full=True) default queries including duplicates ) Quer ...

  2. LinkedHashMap结构get和put源码流程简析及LRU应用

    原理这篇讲得比较透彻Java集合之LinkedHashMap. 本文属于源码阅读笔记,因put,get调用逻辑及链表维护逻辑复杂(至少网上其它文章的逻辑描述及配图,我都没看明白LinkedHashMa ...

  3. Spring Cloud (3)B Ribbon 负载均衡 IRule

    package com.service.config; import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.Ra ...

  4. Oracle函数使用

    数据格式化截取:  Trunc(data,[yyyy]) oracle的特有if判断: decode(sex, 0, '男', 1, '女') 分组排序:row_number() over(parti ...

  5. LeetCode题解 Permutations II 和 Permutations I ——回溯算法

    这个算法感觉还是很陌生的.算法导论里没有讲这个算法,而数据结构与算法分析只用了一节来阐述.我居然跳过去了..尴尬. 笨方法解决的: 第一题: 给定一个元素不重复的数组,枚举出他们的全排列. 方法1:递 ...

  6. P12, cer, provisioning profile

    p12,本地私钥(实际上证书和私钥可以一起导出成p12,这里我们仅指私钥) cer,证书,即苹果签名后的公钥 provisioning profile描述文件 一个证书对应一个私钥,也就是本地的p12 ...

  7. PRC远程过程调用

    RPC(Remote Promote Call) 一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简单.透明.RPC框架负责屏蔽底层的传输方式(TCP ...

  8. Java设置运行时环境参数

    一.代码中,如下: System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", " ...

  9. python 问答

    1.list和tuple有什么区别? list是可变的,可以添加list.append,可以插入list.insert,可以改变元素值list[2] ='a':而tuple在初始化的时候就确定了,不能 ...

  10. python小实例一:简单爬虫

    本文所谓的爬虫就是通过本地远程访问url,然后将url的读成源代码形式,然后对源代码进行解析,获取自己需要的数据,相当于简单数据挖掘.本文实现的是将一个网页的图片爬出保存到本地的过程,例子很简单,用的 ...