E - Cyclic Medians

看到中位数,就是经典套路:将\(\geq\)中位数的都赋值为\(1\),\(<\)的赋值为\(0\)

那么对于数\(A\),就等于\(\sum_{i=1}^{\infty}[A\geq i]\)

所以我们考虑枚举中位数,然后若其\(\leq A\),那么就对答案贡献\(1\)

对于当前枚举的中位数\(mid\),若当前正在操作的数对为\((0,0)\)或\((1,1)\),那么这次更新后答案就与\(a\)无关;若当前操作的是\((0,1)\)或\((1,0)\),那么这次更新后答案就还是与\(a\)有关

无关:更新后答案是\(\geq mid\)还是\(<mid\)与\(A\)和\(mid\)的大小无关

有关:更新后答案是\(\geq mid\)还是\(<mid\)由\(A\)和\(mid\)的大小决定

然后还有一点,就是当\(mid=p\)时最后答案取\(0\)的方案数与\(mid=v-p\)时最后答案取\(1\)的方案数相同,所以算这个答案时需要\(/2\)

考虑求出与\(a\)有关的方案数,然后用总方案数减去与\(a\)有关的方案数就是与\(a\)无关的方案数

因为每次取\(x_{i\%n}\)和\(y_{i\%m}\)作为一对,所以设\(a=i\%n\),\(b=i\%m\),\(g=\gcd(n,m)\),\(n=g\times p\),\(m=g\times q\),那么有:

\[i=a+k_1n,i=b+k_2m\\
a+k_1n=b+k_2m\\
a+k_1\times g\times p=b+k_2\times g\times q\\
a\equiv b\mod g
\]

所以对于所有的数对,就可以分为\(g\)组互不干涉的组

那么要想与\(a\)有关,就必须数对中其中一个为\(0\),另一个为\(1\),那么方案数就为:

\[((mid-1)^{\frac ng}\times(v-mid+1)^{\frac mg}+
(mid-1)^{\frac mg}\times(v-mid+1)^{\frac ng})^g
\]
#include<bits/stdc++.h>
using namespace std;
const int MOD=998244353,inv2=499122177;
int n,m,g,v,a,all,ans;
int power(int x,int y){
int ans=1;
for(;y;y>>=1,x=1ll*x*x%MOD) if(y&1) ans=1ll*ans*x%MOD;
return ans;
}
int gcd(int a,int b){
if(b) while((a%=b)&&(b%=a));
return a+b;
}
void add(int &a,int b){
a+=b;
if(a>=MOD) a-=MOD;
}
int main(){
scanf("%d%d%d%d",&n,&m,&v,&a);
g=gcd(n,m),ans=all=power(v,n+m);// mid=1
for(int i=2;i<=v;++i){
int now=power(1ll*power(i-1,n/g)*power(v-i+1,m/g)%MOD+1ll*power(i-1,m/g)*power(v-i+1,n/g)%MOD,g);
if(i<=a) add(ans,now);
int t=((1ll*all-now)%MOD+MOD)%MOD*inv2%MOD;
add(ans,t);
}
printf("%d",ans); return 0;
}

[arc133e]Cyclic Medians的更多相关文章

  1. codeforces 85D D. Sum of Medians 线段树

    D. Sum of Medians time limit per test 3 seconds memory limit per test 256 megabytes input standard i ...

  2. Codeforces Round #385 (Div. 2) A. Hongcow Learns the Cyclic Shift 水题

    A. Hongcow Learns the Cyclic Shift 题目连接: http://codeforces.com/contest/745/problem/A Description Hon ...

  3. codeforces 709C C. Letters Cyclic Shift(贪心)

    题目链接: C. Letters Cyclic Shift 题意: 现在一串小写的英文字符,每个字符可以变成它前边的字符即b-a,c-a,a-z这样,选一个字串变换,使得得到的字符串字典序最小; 思路 ...

  4. Codeforces 85D Sum of Medians

    传送门 D. Sum of Medians time limit per test 3 seconds memory limit per test 256 megabytes input standa ...

  5. Cyclic Nacklace[HDU3746]

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. HDU 3746:Cyclic Nacklace

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. V-rep学习笔记:机器人逆运动学数值解法(Cyclic Coordinate Descent Method)

    When performing inverse kinematics (IK) on a complicated bone chain, it can become too complex for a ...

  8. hdu-----(3746)Cyclic Nacklace(kmp)

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. Yandex.Algorithm 2011 Round 1 D. Sum of Medians 线段树

    题目链接: Sum of Medians Time Limit:3000MSMemory Limit:262144KB 问题描述 In one well-known algorithm of find ...

  10. hdu 1853 Cyclic Tour 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 There are N cities in our country, and M one-way ...

随机推荐

  1. 【技术分析】简单了解 AccessControl

    当我们开发一个智能合约,但是里面有一些函数不能随便让别人调用,只能"拥有权限"的管理员能够调用,那么这时候我们会用到权限管理机制. 实现起来也很简单,设置一个 owner 变量,通 ...

  2. Git提交历史优化指南:两步合并本地Commit,代码审查更高效!

    在开发过程中,频繁的本地Commit可能导致提交历史冗杂,增加代码审查和维护的复杂度.通过合并连续的Commit,不仅能简化历史记录,还能提升代码可读性和团队协作效率,以下是合并两次本地Commit的 ...

  3. BUUCTF---RSA4

    题目 点击查看代码 N = 33131032421200003002021431224423222240014241042341310444114020300324300210433321420203 ...

  4. java的反射是要先实例化的!

    java两种获得反射的方法 ,一种是Class.forName("A"); 另一种是 A a = new A(); a.getClass(); 第二种是自己实例化之后,我们在类的静 ...

  5. 【DXP】如何在原理图中批量修改

    零.问题 想要修改所有电阻的封装,怎么解决? 一.解决 以修改所有电阻封装为例,可举一反三. 在电阻上右键,选择"查找相似对象". 注意在右键的时候鼠标应该是放在元器件图标上的,而 ...

  6. 二叉树专题学习(C++版) 基础的上机题

    前言: 由于二叉树这一章的题型比较多,涉及到的递归程序也较多,所以单开一个随笔来记录这个学习过程,希望对读者有帮助. 理论知识基础 在二叉树的选择题中,常常会涉及到对于最多或最少结点.最大或最小高度. ...

  7. 在 Ubuntu 上安装 Python 3.11、创建虚拟环境并设置 pip 阿里云源的主要命令

    在 Ubuntu 上安装 Python 3.11.创建虚拟环境并设置 pip 阿里云源的主要命令流程如下: 安装 Python 3.11 sudo apt update sudo apt instal ...

  8. robotframework之数据驱动

    用robotframework做接口自动化时,如果执行用例条数比较多时,需要把用例存到表格当中,通过数据驱动读取表格内容. 一.引入第三方库 数据驱动的第三方库:DataDriver 直接在setti ...

  9. 🔥吐血整理 Bolt.diy 部署与应用攻略

    1.前言 以前总是有很多人无代码基础的人总是在幻想,如何不要自己写代码就可以建立一个自己的创意网站呢?之前总觉得异想天开不可能,屏幕前的你是不是也是这么想的呢,没有想到,Bolt.diy帮你实现了,快 ...

  10. [亲测]ThinkPHP中where方法中变量不解析的解决方法

    2018年5月4日 01:15  血的教训,今天做一个项目,需要批量更新数据,所以where中必须用变量.发现where里的变量不解析并且会直接报错,然后通过搜索发现可以在双引号中的左右加号中包裹变量 ...