总结

又是一日爆炸

\(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】的更多相关文章

  1. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  2. 2017.08.08【NOIP提高组】模拟赛B组

    Summary 今天的题目也不算很难,唯一一道没做出来的题目是以前做过的,太不应该了. Problem T1 油滴扩展 题目大意 给你一堆点,你准备要在这么多的点当中滴油.你可以自己安排顺序,每次滴油 ...

  3. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  4. 2018.12.30【NOIP提高组】模拟赛C组总结

    2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...

  5. NOIP提高组初赛难题总结

    NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...

  6. 津津的储蓄计划 NOIp提高组2004

    这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...

  7. NOIP提高组2004 合并果子题解

    NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...

  8. 1043 方格取数 2000 noip 提高组

    1043 方格取数  2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...

  9. [NOIP提高组2018]货币系统

    [TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...

  10. 2013 Noip提高组 Day2

    3288积木大赛 正文 题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前 ...

随机推荐

  1. 集群部署看过来,低代码@AWS智能集群的架构与搭建方案

    为了帮助充分利用AWS的托管服务快速构建起一套集群环境,彻底去掉"单一故障点",实现最高的可用性,我们准备了<低代码智能集群@AWS的架构与搭建方案>看完本文,带你掌握 ...

  2. JDK中内嵌JS引擎介绍及使用

    原文: JDK中内嵌JS引擎介绍及使用 - Stars-One的杂货小窝 最近研究阅读这个APP,其主要功能就是通过一个个书源,从而实现移动端阅读的体验 比如说某些在线小说阅读网站,会加上相应的广告, ...

  3. PostgreSQL常用操作合辑:时间日期、系统函数、正则表达式、库表导入导出、元数据查询、自定义函数、常用案例

    〇.参考地址 1.pg官方文档 http://www.postgres.cn/docs/9.6/index.html 2.腾讯云仓pg文档 https://cloud.tencent.com/docu ...

  4. JavaEE Day01 基础加强

    今日内容 1.Junit单元测试(测试类) 2.反射 3.注解 一.Junit单元测试 1.概述 测试分类 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值 2.白盒测试:需要写代码 ...

  5. Spring Boot回顾

    一.概述 1.Spring的优缺点 优点 无需开发ELB,通过IOC和AOP,就可以使用POJO(简单的Java对象)实现ELB的功能 缺点: 依赖管理导入Maven耗时耗力 注解繁琐 2.Sprin ...

  6. 所元素设为border-box

    /*全局设为CSS3盒模型 border-box*/ html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inher ...

  7. Python面试常见算法题集锦(递归部分)

    0x1 前言 开始学习python基础的时候,有以下几种算法是面试中常见的,也是前期学习python的时候可以连带学习了解的,不卡门槛哟 0x2 实现算法的方式很多种,而算法的实现也是分程序语言的,此 ...

  8. [图像处理] YUV图像处理入门2

    1 分离YUV420中YUV分量 本程序中的函数主要是将YUV420P视频数据流的第一帧图像中的Y.U.V三个分量分离开并保存成三个文件.函数的代码如下所示: /** * @file 1 yuv_sp ...

  9. Git使用记录 - 持续更新

    本地生成 sshkey 打开git命令工具 cd ~/.ssh ssh-keygen -t rsa -C "实际的eamil地址" ··· // 一路回车,出现以下则说明成功 Yo ...

  10. Android Volley 基本使用

    Android Volley 基本使用 本篇主要介绍 Google 给Android 平台提供的 Volley 一个 Http请求库 , 齐射! 1.概述 Volley是Google 提供的一个小巧的 ...