JZOJ 2020.08.03【NOIP提高组】模拟 &&【NOIP2015模拟11.5】
总结
又是一日爆炸
\(T1\) 不出所料报 \(0\) 了?!
题目
\(T1\)
JZOJ 4315. Prime
暴力就好了?!
考场根本没想暴力
赛后发现暴力跑得贼快
只需二分一下组数的上界
然后 \(dfs\) 判断能否能成功分完组
跑时顺便统计答案就行了
\(Code\)
#include<cstdio>
#include<iostream>
using namespace std;
const int N = 20;
int n , a[N] , vis[N][N] , d[N][N] , cnt , ans , Mx , bz;
inline int gcd(int x , int y){return y == 0 ? x : gcd(y , x % y);}
inline void dfs(int x , int mid , int Max)
{
if (mid > ans || mid == ans && Max >= Mx) return;
if (cnt > mid) return;
if (x > n)
{
bz = 1;
if (ans > mid) ans = mid , Mx = Max;
else if (ans == mid && Max < Mx) Mx = Max;
return;
}
for(register int i = 1; i <= cnt; i++)
{
int fl = 0;
for(register int j = 1; j <= d[i][0]; j++)
if (!vis[x][d[i][j]])
{
fl = 1;
break;
}
if (fl) continue;
d[i][++d[i][0]] = x;
dfs(x + 1 , mid , max(Max , d[i][0]));
--d[i][0];
}
d[++cnt][++d[cnt][0]] = x;
dfs(x + 1 , mid , max(Max , 1));
--d[cnt][0] , --cnt;
}
int main()
{
freopen("prime.in" , "r" , stdin);
freopen("prime.out" , "w" , stdout);
scanf("%d" , &n);
for(register int i = 1; i <= n; i++) scanf("%d" , &a[i]);
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= n; j++)
if (i != j) vis[i][j] = gcd(a[i] , a[j]) == 1 ? 1 : 0;
ans = 0x3f3f3f3f , Mx = 0x3f3f3f3f;
int l = 1 , r = n , mid;
while (l <= r)
{
mid = (l + r) >> 1;
cnt = bz = 0;
dfs(1 , mid , 0);
if (bz) r = mid - 1;
else l = mid + 1;
}
printf("%d %d" , ans , Mx);
}
\(T2\)
JZOJ 4316. Isfind
一眼没看出?!序列自动机?!?
去一边,暴力又能过?!!
天!!!
而我想到了非暴力的解法,幸好过了,不然亏大了
只需记录每种字母在原串出现的先后位置
然后匹配时二分找位置判断就行了
\(Code\)
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 1e5 + 5;
int n , m , a[30][N] , p[30];
char s[N];
inline int binary(int t , int x)
{
int l = 0 , r = p[t] , mid , res = -1;
while (l <= r)
{
mid = (l + r) >> 1;
if (a[t][mid] >= x) res = a[t][mid] , r = mid - 1;
else l = mid + 1;
}
return res;
}
int main()
{
freopen("isfind.in" , "r" , stdin);
freopen("isfind.out" , "w" , stdout);
scanf("%d%d%s" , &n , &m , s);
int len = strlen(s) , pos , pos1 , fl;
for(register int i = 0; i < 28; i++) p[i] = -1;
for(register int i = 0; i < len; i++) a[s[i] - 'a'][++p[s[i] - 'a']] = i;
while (m--)
{
scanf("%s" , s);
len = strlen(s);
pos = -1;
fl = 0;
for(register int i = 0; i < len; i++)
{
pos1 = binary(s[i] - 'a' , pos + 1);
if (pos1 == -1)
{
printf("N\n");
fl = 1;
break;
}
else pos = pos1;
}
if (!fl) printf("Y\n");
}
}
实际上,它是序列自动机的模板题
所以上个序列自动机的代码
\(Code\)
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 1e5 + 5 , INF = 0x3f3f3f3f;
int n , m , nxt[N][30];
char s[N];
int main()
{
freopen("isfind.in" , "r" , stdin);
freopen("isfind.out" , "w" , stdout);
scanf("%d%d%s" , &n , &m , s);
int len = strlen(s);
for(register int i = 0; i <= 26; i++) nxt[len][i] = INF;
for(register int i = len - 1; i >= 0; i--)
{
for(register int j = 0; j <= 26; j++) nxt[i][j] = nxt[i + 1][j];
nxt[i][s[i] - 'a'] = i;
}
for(; m; --m)
{
scanf("%s" , s);
len = strlen(s);
int pos = -1 , fl = 0;
for(register int i = 0; i < len; i++)
{
pos = nxt[pos + 1][s[i] - 'a'];
if (pos == INF)
{
printf("N\n") , fl = 1;
break;
}
}
if (!fl) printf("Y\n");
}
}
\(T3\)
JZOJ 4317. Divide
很显然 \(a_i\) 有用的部分是 \(\gcd(a_i,p)\)
然后我们就发现 \(a_i \times a_j \times a_k\) 相当于 \(p\) 的因数相乘
我们只要处理出 \(p\) 的所有因数,然后 \(O(tot^3)\) 枚举三个因数相乘
用桶记下每种因数在 \(a\) 出现的次数
然后分类讨论算贡献即可
\(Code\)
#include<cstdio>
using namespace std;
typedef long long LL;
const int N = 3e4 + 5 , M = 1e6 + 5;
LL a[N] , pr[M] , buc[M] , p , ans;
int n , tot;
inline LL gcd(LL x , LL y){return y == 0 ? x : gcd(y , x % y);}
int main()
{
freopen("divide.in" , "r" , stdin);
freopen("divide.out" , "w" , stdout);
scanf("%d%lld" , &n , &p);
for(register int i = 1; i <= n; i++)
{
scanf("%lld" , &a[i]);
a[i] = gcd(a[i] , p);
++buc[(int)a[i]];
}
for(register int i = 1; i <= p; i++)
if (p % i == 0) pr[++tot] = i;
for(register int i = 1; i <= tot; i++)
for(register int j = i; j <= tot; j++)
for(register int k = j; k <= tot; k++)
if (pr[i] * pr[j] % p * pr[k] % p == 0)
{
if (i == j && i == k) ans += buc[pr[i]] * (buc[pr[i]] - 1) * (buc[pr[i]] - 2) / 6;
else{
if (i == j) ans += buc[pr[i]] * (buc[pr[j]] - 1) * buc[pr[k]] / 2;
else if (i == k) ans += buc[pr[i]] * (buc[pr[k]] - 1) * buc[pr[j]] / 2;
else if (j == k) ans += buc[pr[j]] * (buc[pr[k]] - 1) * buc[pr[i]] / 2;
else ans += buc[pr[i]] * buc[pr[j]] * buc[pr[k]];
}
}
printf("%lld" , ans);
}
JZOJ 2020.08.03【NOIP提高组】模拟 &&【NOIP2015模拟11.5】的更多相关文章
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- 2017.08.08【NOIP提高组】模拟赛B组
Summary 今天的题目也不算很难,唯一一道没做出来的题目是以前做过的,太不应该了. Problem T1 油滴扩展 题目大意 给你一堆点,你准备要在这么多的点当中滴油.你可以自己安排顺序,每次滴油 ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- 2018.12.30【NOIP提高组】模拟赛C组总结
2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...
- NOIP提高组初赛难题总结
NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- 1043 方格取数 2000 noip 提高组
1043 方格取数 2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...
- [NOIP提高组2018]货币系统
[TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...
- 2013 Noip提高组 Day2
3288积木大赛 正文 题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前 ...
随机推荐
- 【SQL真题】SQL3:每类视频近一个月的转发量/率
题目: https://www.nowcoder.com/practice/a78cf92c11e0421abf93762d25c3bfad?tpId=268&tqId=2285068& ...
- python软件开发目录规范
软件开发目录规范 1.文件及目录的名字可以变换 但是思想是不变的 分类管理 2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类 myproject项目文件夹 1,bin文件夹 -- ...
- python基础-常用内置包
内置包是python自带的一些功能模块,有需求时可以在自己文件中直接导入使用. 1.datetime包 python中的时间包,可以在业务开发中辅助我们处理时间信息: # datetime可以 ...
- windows简单使用Jenkins遇到的一些坑
简言: 闲来没事干,最近身边的小伙伴都在谈论CI/CD.自动化等等,耳朵都磨出茧了.这不闲着研究下jenkins.下面将自己遇到的一些坑分享出来. 首先介绍下Jenkins.Jenkins 是一个基于 ...
- C#中的进程检测退出事件和座位状态改变事件深入浅出谈谈EventHandler的使用
关于进程 之前我在启动我的师生对讲的exe的时候,都是直接调用Process类的静态函数Process.Start(System.String AppPath,System.String Argume ...
- 聊聊CPU的发展历程之单核、多核、超线程
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试.职业成长相关资料等更多精彩文章在公众号「小牛呼噜噜」 大家好,我是呼噜噜,在计算机的早期,In ...
- 【FAQ】申请Health Kit权限的常见问题及解答
华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,用户数据被授权获取后,应用可通过接口访问运动健康数据,对相关数据进行增.删.改.查等操作.这篇文章汇总了申请开通Health ...
- AcWing341. 洛谷P1073, NOIP2009 最优贸易
AcWing题目传送门 洛谷题目传送门 题目大意 \(~~~~~~\)一个投机倒把的奸商想要通过城市不太健全的贸易系统坑点钱,任意城市都可以买入或者卖出水晶球,他想尽量在便宜的城市买入,在贵的城市卖出 ...
- Hadoop详解(04-1) - 基于hadoop3.1.3配置Windows10本地开发运行环境
Hadoop详解(04-1) - 基于hadoop3.1.3配置Windows10本地开发运行环境 环境准备 安装jdk环境 安装idea 配置maven 搭建好的hadoop集群 配置hadoop ...
- 激光炸弹【算法竞赛进阶指南, HNOI2003】
激光炸弹 地图上有 \(N\) 个目标,用整数 \(Xi,Yi\)表示目标在地图上的位置,每个目标都有一个价值 \(Wi\). 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包 ...