T1

Input

从文件 awesome.in 中读入数据。

第一行 2 个用空格隔开的整数 \(n\), \(P\)。

第二行 n 个用空格隔开的整数 \(A_1, \cdots , A_n\)。

Output

输出到文件 awesome.out 中。

输出一行一个整数,表示极好的三元组的数目。

前置知识

  1. 字符串
  2. 暴力
  3. STL map

解法

考虑若\(x=y \not= z\), 则直接暴力求出z的个数即可

若\(x=y=z\), 暴力扫描序列判断即可

否则\(x \not= y \not= z\)去重, 对每个数求出逆元后暴力匹配jike

代码

/*code by tyqtyq*/
#include<bits/stdc++.h>
#define int long long
#define f(i,x,y) for(register int i=x, i##end=y; i<=i##end; ++i)
#define d(i,x,y) for(register int i=y, i##end=x; i>=i##end; --i)
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
using namespace std;
int read(int& x){x=0; int f=1, ch=getchar(); while(!isdigit(ch)) f=ch=='-'?-1:f, ch=getchar(); while(isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x*=f;}
int read(){int x=0, f=1, ch=getchar(); while(!isdigit(ch)) f=ch=='-'?-1:f, ch=getchar(); while(isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x*f;}
int max(int x, int y){return x>y?x:y;} int min(int x, int y){return x<y?x:y;}
int a[2500], b[2500], inv[2500], n, p, ans=0, ct=0, fa=0;
map<int, int> mp;
int power(int a, int b){int res=1, car=a;while(b){if(b&1) res=res*car%p;car=car*car%p;b>>=1;}return res;}
signed main(){
FO(awesome);
read(n); read(p);
f(i,1,n) read(a[i]);
sort(a+1, a+n+1);
f(i,1,n) b[i]=a[i];
int m=unique(b+1, b+n+1)-b-1;
int x=a[n+1]=-1, cnt=0;
f(i,1,n+1){
if(x!=a[i]){
if(cnt>=2){for(int j=1;j<=m;++j){ if(b[j]==x) continue; if((long long)x*x%p*b[j]%p==1) ++ans; }}
if(cnt>=3 && ((long long)x*x%p*x%p==1)) ++ans;
x=a[i]+(cnt=0);
}
++cnt;
} fa=ans, ans=0;
f(i,1,m){
if(b[i]%p){
inv[i] = power(b[i]%p, p-2);
++mp[inv[i]];
}
}
f(i,1,m){
if(b[i]%p){
--mp[inv[i]];
f(j,i+1,m){
if(b[j]%p){
int x = (long long)b[i]*b[j] % p;
auto it=mp.find(x); if(it!=mp.end()) ans += (*it).second;
if(x == inv[j]) --ans;
}
}
}
}
cout<<fa+ans/2<<endl;
return 0; //拜拜程序~
}

T2

Input

从文件 bag.in 中读入数据。

单个测试点中包含多组数据,输入第一行为一个非负整数 \(T\),描述数据组数。接下来依次描述每组数据,对于每组数据:

第一行一个非负整数 \(n\),描述物品数量。

第 \(2\) 行至第 \(n + 1\) 行,每行两个用空格隔开的正整数,其中第 \(i + 1\) 行的两个数依次为 \(w_i, v_i\),分别描述第 \(i\) 个物品的重量和价值。

接下来一行一个非负整数 \(m\),描述背包数量。

接下来一行 \(m\) 个用空格隔开的正整数 \(t_1, \cdots , t_m\),依次描述各背包的承重上限。

Output

输出到文件 bag.out 中。

一行一个整数,表示能够选出的物品数量的最大值。

解法

本题与传统的二维偏序问题类似,只需要仔细考虑维度、顺序问题。

对于一条长度为\(l\)的链,贪心地,我们发现用容量最大的\(l\)个背包一定是最优的背包安排。

因此将所有点按\(x\)降序排序,并依次枚举所有点,用权值树状数组维护离散化后每个\(y\)坐标结尾的最长链长度,注意需要维护能够存的下当前点背包数量,并在更新树状数组时将更新的答案与这个值取\(min\)。

代码

#include<bits/stdc++.h>
using namespace std; /*Copyright [tyqtyq](http://oiertyq.github.io). All rights served.*/
#define f(i,x,y) for(int i=x,i##end=y;i<=i##end;++i)
#define d(i,x,y) for(int i=x,i##end=y;i>=i##end;--i)
#define ri register int
#define ll long long
#define il inline
#define _ 100005
#define lowbit(x) (x) & (-x)
namespace intio{char ch; int read(){ ri x=0,f=1; while(!isdigit((ch=getchar()))) f=ch=='-'?-1:1; while(isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x*f; } int read(int& x) {return x = read();}}; using namespace intio;
int max(int x, int y) {return x>y?x:y;} int min(int x, int y) {return x<y?x:y;}
int t[_], n, m, c[_], r[_], rn;
struct thing{int w, v; thing(int a=0, int b=0):w(a), v(b){}}a[_];
int cmp1(thing a, thing b){return a.w > b.w || (a.w==b.w && a.v > b.v) ;}
int cmp2(int a, int b){return a>b;}
int query(int x){
int res=0;
while(x<=rn){
res = max(res, c[x]);
x += lowbit(x);
}
return res;
}
void modify(int p, int x){
while(p>0) {
c[p] = max(x, c[p]);
p -= lowbit(p);
}
}
int T=0;
int main(){
freopen("bag.in", "rb", stdin);
freopen("bag.out", "wb", stdout);
read(T);
while(T--){
memset(c, 0, sizeof(c));
read(n); f(i,1,n) read(a[i].w), r[i]=read(a[i].v);
read(m); f(i,1,m) read(t[i]);
sort(t+1, t+1+m, cmp2);
sort(a+1, a+1+n, cmp1);
sort(r+1, r+1+n);
rn = unique(r+1, r+1+n) - r - 1;
f(i,1,n) a[i].v = lower_bound(r+1, r+1+rn, a[i].v)-r;
int j=0; f(i,1,n){
while(j < m && a[i].w <= t[j + 1]) ++j;
modify(a[i].v, min(query(a[i].v) + 1,j));
}
cout<<query(1)<<endl;
}
return 0;
}

T3

Input

Output

输出到文件 subtree.out 中。

输出用单个空格隔开的 \(R - L + 1\) 个整数,依次表示深度为 \(L, L + 1, \cdots , R\) 的好的\(Yazid\)树数目对 \(998244353\) 取模的结果。

解法

设\(dp[i][d]\)表示\(i\)个节点深度不超过\(d\)的有根树数目(很显然,若计算出所有\(dp[i][d]\),则可以通过差分求得各答案)。若不考虑禁手,则可以枚举根为编号次大子树大小\(j\),并进行转移,具体转移方程为:

\[dp[i][d]=
\begin{align*}
\begin{cases}
0& \text{i为禁手}\\
\sum_{j=1}^{i-1} dp[i-j][d] \times dp[j][d-1] \times \dbinom{i-2}{j-1}& \text{otherwise;}
\end{cases}
\end{align*}
\]

代码

#include<bits/stdc++.h>
using namespace std; /*Copyright [tyqtyq](http://oiertyq.github.io). All rights served.*/
#define f(i,x,y) for(int i=x,i##end=y;i<=i##end;++i)
#define d(i,x,y) for(int i=x,i##end=y;i>=i##end;--i)
#define ri register int
#define ll long long
#define il inline
#define int unsigned long long
#define read(X) cin>>X
const int mod=998244353;
int max(int x, int y) {return x>y?x:y;} int min(int x, int y) {return x<y?x:y;}
int dp[505][505], t[505][505], frac[505], inv[505], k;
int power(int a, int b){
int res=1, car=a;
while(b){
if(b&1) res = (res*car)%mod;
car = (car*car)%mod;
b>>=1;
}
return res;
}
void init(){
frac[0]=inv[0]=1;
f(i,1,500) frac[i] = (frac[i-1]*i)%mod;
inv[500] = power(frac[500], mod-2);
d(i,499,1) inv[i] = (inv[i+1]*(i+1))%mod;
}
int n, l, r, d, a[505], u[505];
int C(int n, int k){
return (((frac[n]*inv[k])%mod)*inv[n-k])%mod;
}
signed main(){
freopen("subtree.in", "r", stdin); freopen("subtree.out", "w", stdout);
int ttt=0;
init(); read(n); read(k); f(i,1,k) cin>>ttt, u[ttt]=1; read(l); read(r);
if(u[1]) {f(i,l,r) printf("0 "); return puts(""), 0;}
f(i,1,n) dp[1][i]=1; f(i,2,n) dp[2][i]=1;
f(i,3,n) f(d,1,n) f(j,1,i-1)
if(!u[j]) dp[i][d] = ((dp[i][d] + ((((dp[i-j][d]*dp[j][d-1])%mod)*C(i-2, j-1))%mod))%mod);
f(i,l,r) cout<<(!u[n] ? ((dp[n][i] - dp[n][i - 1] + mod) % mod) : 0)<<" "; puts("");
return 0;
}

JZOJ-2019-11-7 A组的更多相关文章

  1. JZOJ 【NOIP2016提高A组集训第16场11.15】兔子

    JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...

  2. JZOJ 【NOIP2016提高A组集训第16场11.15】SJR的直线

    JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 2 ...

  3. 2019.11.9 csp-s 考前模拟

    2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...

  4. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

  5. [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)

    更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...

  6. JZOJ2020年8月11日提高组T4 景点中心

    JZOJ2020年8月11日提高组T4 景点中心 题目 Description 话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个 ...

  7. JZOJ2020年8月11日提高组T3 页

    JZOJ2020年8月11日提高组T3 页 题目 Description 战神阿瑞斯听说2008年在中华大地上,将举行一届规模盛大的奥林匹克运动会,心中顿觉异常兴奋,他想让天马在广阔的天空上,举行一场 ...

  8. JZOJ2020年8月11日提高组T2 宝石

    JZOJ2020年8月11日提高组T2 宝石 题目 Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是 ...

  9. JZOJ2020年8月11日提高组T1 密码

    JZOJ2020年8月11日提高组T1 密码 题目 Description 在浩浩茫茫的苍穹深处,住着上帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏.今天他们正在观赏大地 ...

  10. JZOJ2020年8月11日提高组反思

    JZOJ2020年8月11日提高组反思 T1 看到题 啊这?! 我看错了吗??? 我理解错题了吗?? 好吧没有-- 高精度模板题,不用多说 T2 看到这种矩阵的问题 以为是前缀和搞事情 结果呢 扫描线 ...

随机推荐

  1. http协议请求报文与响应报文分析

    什么是HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到 不断地完善和扩展.目前在WWW中使用 ...

  2. JS写一个列表跑马灯效果--基于touchslide.js

    先放上效果图: 类似于这样的,在列表中循环添加背景样式的跑马灯效果. 准备引入JS插件: <script type="text/javascript" src="x ...

  3. 036、Java中三目运算符的使用

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  4. 在xampp下安装thinkphp5

    在xampp2016下安装thinkphp5 (本人的坑,说白了就是把thinkphp5的文件放到htdocs下) 1.把该xampp中的php文件夹路径设置进环境变量,这样才能全局运行compose ...

  5. Spring boot application.properties和 application.yml 初学者的学习

    来自于java尚硅谷教程 简单的说这两个配置文件更改配置都可以更改默认设置的值比如服务器端口号之类的,只需再文件中设置即可, properties可能是出现的比较早了,如果你不调你的默认编码,中文可能 ...

  6. MQTT 协议学习:004-MQTT建立通信与 CONNECT 、CONNACK 报文

    背景 上一讲 MQTT 协议学习:通信报文的构成介绍了在MQTT通信中,各报文的通信流程:从本讲开始,我们开始介绍实际中使用的报文,以及它们的组成. CONNECT - 连接请求 报文 客户端到服务端 ...

  7. 网卡工作原理和wireshark混杂模式

    通过设置网卡为混杂模式就能捕获局域网内所有发包内容,包括非广播包和非发给自己主机的数据包 这是为什么呢? 即主机A发送一个数据包给主机B,我作为主机C怎么也能截获这个数据包呢,原理是什么? 我的网卡为 ...

  8. 19 03 13 关于 scrapy 框架的 对环球网的整体爬取(存储于 mongodb 数据库里)

    关于  spinder  在这个框架里面   和不用数据库  相同 # -*- coding: utf-8 -*- import scrapy from yang_guan.items import ...

  9. opencv python训练人脸识别

    总计分为三个步骤 一.捕获人脸照片 二.对捕获的照片进行训练 三.加载训练的数据,识别 使用python3.6.8,opencv,numpy,pil 第一步:通过笔记本前置摄像头捕获脸部图片 将捕获的 ...

  10. Spring 框架介绍

    Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – I ...