A

B

题意:给你N个数(3e5) 每个数可以是0,a,b,a+b(3e5) 但是总数加起来要是定值K(18e10)

问总方法数mod 998244353

解:

把a+b的看成是一个a加上一个b的 这样从0-N枚举a的个数 判断b的个数是否合法

如果合法的话 这种情况的所有方法数就相当于在N个中选i个放a 然后再在N个中选剩下的b个放b

anser = (anser + (ncr(n, i) * ncr(n, remain / B) % mod)) % mod

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 3e5 + ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
ll Qpow(ll a, ll b)
{
ll ans = , base = a;
while (b != )
{
if (b & != )
{
ans = (ans * base) % mod;
}
base = (base * base) % mod;
b >>= 1LL;
}
return ans % mod;
}
ll Inv(ll a)
{
return Qpow(a, mod - );
}
ll fact[N], Invfact[N], anser = ;
ll ncr(ll n, ll r)
{
if (r < || n < )
{
return ;
}
if (n < r)
{
return ;
}
ll a = fact[n];
a = (a * Invfact[r]) % mod;
a = (a * Invfact[n - r]) % mod;
return a;
}
int main()
{
ios_base::sync_with_stdio();
cin.tie();
ll n, A, B, K;
cin >> n >> A >> B >> K;
Invfact[] = Invfact[] = fact[] = fact[] = ;
for (ll i = ; i <= 3e5 + ; i++)
{
fact[i] = (fact[i - ] * i) % mod;
Invfact[i] = Inv(fact[i]);
}
ll remain;
for (ll i = ; i <= n; i++)
{
remain = K - i * A;
if (remain >= && remain % B == && remain / B <= n)
{
anser = (anser + (ncr(n, i) * ncr(n, remain / B) % mod)) % mod;
}
}
cout << anser << endl;
return ;
}

C

题意:给你一个数轴和N个线段 有两个人A,B A每次给B一个线段 要求B要走到线段的范围内 B初始在原点

A会选最优方案使得B走的距离最远 而B会选最优方案使得自己走的距离最少 问你最后B走的距离是多少

解:

A选的方案肯定是使得B在原点左右来回跑 这样使得跑的距离最大

这样我们把L从大到小排列 把R从小到大排列 如果有L>R 就说明B需要走这么长的距离来满足条件

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 1e5 + ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
vector<int> l, r;
int main()
{
ios_base::sync_with_stdio();
cin.tie();
int n;
cin >> n;
l.push_back(), r.push_back();
for (int i = ; i <= n; i++)
{
int L, R;
cin >> L >> R;
l.push_back(L);
r.push_back(R);
}
ll anser = ;
sort(l.rbegin(), l.rend());
sort(r.begin(), r.end());
for (int i = ; i <= n; i++)
{
if (l[i] > r[i])
{
anser += 2LL * (l[i] - r[i]);
}
}
cout << anser << endl;
return ;
}

最新文章

  1. 基本类型和引用类型调用是的区别(Object.create)
  2. Mac OS 中的 Python(和 NumPy)开发环境设置
  3. delphi控件属性大全-详解-简介
  4. css学习笔记 1
  5. SQL中的循环、for循环、游标
  6. Linux内核分析笔记 与Linux内核开发理论
  7. iOS开发--即时通讯
  8. Linux Kernel KVM &#39;apic_get_tmcct()&#39;函数拒绝服务漏洞
  9. 用Python高亮org-mode代码块
  10. redis学习心得之三-【java操作redis】
  11. 九宫格问题 A*
  12. 第4章 同步控制 Synchronization ----死锁(DeadLock)
  13. DFS算法(——模板习题与总结)
  14. HDU 2682 Tree
  15. SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event
  16. vector的内存分配问题
  17. Live2D插件--漂浮的二次元小姐姐
  18. network / switchboard / jiaohuanji
  19. 【Django】django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
  20. 简介jsp

热门文章

  1. 拉普拉斯矩阵(Laplacian matrix)
  2. BCNF/3NF 数据库设计范式简介
  3. oracle 创建多个数据库
  4. 阶段3 2.Spring_07.银行转账案例_8 基于接口的动态代理回顾
  5. 阶段3 2.Spring_07.银行转账案例_2 案例中添加转账方法并演示事务问题
  6. ros3。3教程 入门到高级
  7. IF-ELSE嵌套练习
  8. linux shutdown 命令 关机 重启
  9. HTML标签--&gt;段落,格式,文本
  10. HDU 1753 大明A+B (大正小数加法、字符串处理)