洛阳怀
首先发现取前缀gcdgcdgcd的顺序一定是从后往前,然后就没有什么思路了,考虑从 fff 的性质入手
f(s)=f(sp)+1/−1f(s)=f(\frac{s}{p})+1/-1f(s)=f(ps​)+1/−1,然后f(sp)f(\frac{s}{p})f(ps​) 又会取它的最小质因子
于是一个 sss 的所有质因子对它都有贡献,如果是好质数,有1的贡献,否则为 -1 的贡献
除掉一个 gcdgcdgcd 就是把1−−i1--i1−−i中所有数的 f(gcd)f(gcd)f(gcd) 给去掉,贪心判一下即可

// woj 4150
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int n,m,a[N],isp[N],prim[N],tot;
int g[N],ans;
bitset<1000000000> S;
int read(){int cnt=0; char ch=0;while(!isdigit(ch)) ch=getchar();while(isdigit(ch))cnt=cnt*10+(ch-'0'),ch=getchar();return cnt;
}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
void init(){for(int i=2;i<=N-5;i++){if(!isp[i]) isp[i]=1,prim[++tot]=i;for(int j=1;j<=tot && prim[j]*i<=N-5;j++){isp[i*prim[j]]=1;if(i%prim[j]==0) break;}}
}
int divide(int x){int ans=0;for(int i=1;i<=tot && prim[i]*prim[i]<=x;i++){while(x%prim[i]==0) ans+=S[prim[i]]?-1:1,x/=prim[i];}if(x>1) ans+=S[x]?-1:1;return ans;
}
int main(){n=read(),m=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=m;i++) S[read()]=1;init();for(int i=1;i<=n;i++) ans+=divide(a[i]);for(int i=1;i<=n;i++) g[i]=gcd(g[i-1],a[i]);int div=1;for(int i=n;i>=1;i--){g[i]/=div;int x=divide(g[i]);if(x<0) ans+=i*(-x),div*=g[i];}printf("%d\n",ans);return 0;
}

01 串
发现 m≤1e6m\le 1e6m≤1e6于是就可以枚举每一个 zzz
于是预处理出每一个 zzz 向后跳的结点,然后倍增
考虑如何跟给出的 010101 串匹配,可以 hashhashhash,倍增的时候顺便处理即可

// woj 4079
#include<bits/stdc++.h>
#define N 1000050
using namespace std;
int read(){int cnt = 0, f = 1; char ch = 0;while(!isdigit(ch)){ ch = getchar(); if(ch == '-') f = -1;}while(isdigit(ch)) cnt = cnt*10 + (ch-'0'), ch = getchar();return cnt * f;
}
typedef unsigned long long ull;
const ull Base = 5261023;
ull S[N]; char s[N];
ull hash[N][18], pw[N];
int nxt[N][18];
int a, c, k, m, n;
ull get(int l, int r){ return S[r] - S[l-1] * pw[r - l + 1];}
int main(){a = read(), c = read(), k = read(), m = read(), n = read();scanf("%s", s + 1); pw[0] = 1;for(int i = 1; i <= n; i++) pw[i] = pw[i-1] * Base, S[i] = S[i-1] * Base + s[i] - '0';for(int i = 0; i < m; i++){nxt[i][0] = ((1ll * i * a + c) / k) % m;hash[i][0] = nxt[i][0] < (m/2) ? 0 : 1;}for(int i = 1; (1 << i) <= n; i++){for(int j = 0; j < m; j++){nxt[j][i] = nxt[nxt[j][i-1]][i-1];hash[j][i] = hash[j][i-1] * pw[1 << (i-1)] + hash[nxt[j][i-1]][i-1];}} int ans = 0;for(int i = 0; i < m; i++){int pos = 1;int x = i;for(int j = 18; j >= 0; j--){if(pos + (1 << j) - 1 > n) continue;if(hash[x][j] == get(pos, pos + (1 << j) - 1)) x = nxt[x][j], pos += (1 << j);} if(pos == n + 1) ++ ans;} cout << ans; return 0;
}

shop
发现并没有什么数据结构支持这个操作,于是我们想到了乱搞
如果一个一个减的话,显然会TTT,如何优化
首先当前价位最多可以买的是 wvi\frac{w}{v_i}vi​w​,但万一钱太多,就会一个一个往后跳
想到了求一个前缀和然后二分下一个跳的位置,还需要记录个数的前缀和
整理一下思路
1.我们先二分到第一个小于它的,显然要从它开始买
2.然后二分下一个点使得直接的前缀和刚好小于它
3.减去前缀和过后用 wvi\frac{w}{v_i}vi​w​处理一下当前能买的个数
4.剩下的钱递归处理
听说www跳的操作类似取模,每次至少少一半,我试了下好像不是,复杂度不能严格证明
但一想到我们每次可以通过前缀和剪掉一大坨,然后将www 的规模缩小到较小的 viv_ivi​,我们就有信心认为我们的程序快得飞起,复杂度 O(nlognk)O(nlognk)O(nlognk),kkk 是递归次数,大概是 log(w)log(w)log(w) 级别的
所以以后一道题没有思路并不要怕,从出题人的角度看他并卡不掉你

// woj 2821
#include<bits/stdc++.h>
#define N 100050
using namespace std;
typedef long long ll;
ll read(){ll cnt = 0, f = 1; char ch = 0;while(!isdigit(ch)){ ch = getchar(); if(ch == '-') f = -1;}while(isdigit(ch)) cnt = cnt*10 + (ch-'0'), ch = getchar();return cnt * f;
}
int n, m;
struct data{ int x, v;} a[N];
bool cmp(data a, data b){ return a.v > b.v;}
ll sum[N], cnt[N];
ll get(int laspos, ll w){if(w < a[n].v) return 0;ll ans = 0;int l = laspos, r = n + 1;while(l < r){int mid = (l+r) >> 1;if(a[mid].v <= w) r = mid;else l = mid + 1;} int pos = l;l = pos - 1; r = n;while(l < r){int mid = (l+r+1) >> 1;if(sum[mid] - sum[pos-1] <= w) l = mid;else r = mid - 1;} int Rp = l;laspos = Rp;w -= sum[Rp] - sum[pos - 1];ans += cnt[Rp] - cnt[pos - 1];if(Rp == n) return ans;if(Rp < n){int k = w / a[Rp + 1].v;w -= 1ll * k * a[Rp + 1].v; ans += k;++laspos;} return ans + get(laspos, w);
}
int main(){n = read(), m = read();for(int i = 1; i <= n; i++) a[i].v = read(), a[i].x = read();sort(a + 1, a + n + 1, cmp);for(int i = 1; i <= n; i++){sum[i] = sum[i-1] + 1ll * a[i].v * a[i].x;cnt[i] = cnt[i-1] + (ll)a[i].x;}while(m--){ll w = read();cout << get(1, w) << '\n';} return 0;
}

CSP-S 模拟 19/10/11相关推荐

  1. 19.7 主动模式和被动模式 19.8 添加监控主机 19.9 添加自定义模板 19.10 处理图形中的乱码 19.11 自动发现...

    2019独角兽企业重金招聘Python工程师标准>>> 19.7 主动模式和被动模式 • 主动或者被动是相对客户端来讲的 • 被动模式,服务端会主动连接客户端获取监控项目数据,客户端 ...

  2. xubuntu 19.10安装tensorflow-gpu-2.0(本文很乱,供自己参考)

    笔记本电脑 神州战神 Z8-CT7NT 1. 先安装miniconda 2.由于后期可能会遇到一个问题,所以可以先安装 grpcio conda install grpcio 3. 由于我这边 ten ...

  3. 2018年第十届ACM四川省省赛题解(10 / 11)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2018ACM四川省省赛 题目链接:https://www.oj.swust.edu.cn/probl ...

  4. 韩顺平循序渐进学java 第10.11讲 继承.重载.覆盖

    10.1 继承-四大特征之三 10.1.1 概念 继承可以解决代码复用,让编程更加接近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类(比如刚才的Student),在父类中定 ...

  5. Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24

    作者 | 木苏.进超.冬岛.元毅.心水.衷源 业界要闻 1.云原生编程语言 Pulumi 1.0 pulumi ,一款中立的开源云开发平台,Pulumi 支持多语言.混合云环境.完全可扩展.初期支持 ...

  6. 19.7 主动模式和被动模式 19.8 添加监控主机 19.9 添加自定义模板 19.10 处理图形...

    19.7 主动模式和被动模式 19.8 添加监控主机 19.9 添加自定义模板 19.10 处理图形中的乱码 19.11 自动发现 转载于:https://blog.51cto.com/1322737 ...

  7. Linux(Ubuntu 19.10)下 Qt5 连接 MySQL(QMYSQL driver not loaded)

    Linux(Ubuntu 19.10)下 Qt5 连接 MySQL 安装好 MySQL 和 Qt Qt 连接 MySQL 的代码 QSqlDatabase d=QSqlDatabase::addDat ...

  8. LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11

    Table of Contents SI静态部分和动态部分有两个部分. 静态部件称为 MIB 动态部件称为 SIB Detail Sample LTE System Information Block ...

  9. Ubuntu 19.10“Eoan Ermine”正式发布

    Canonical 今天正式发布了代号为 "Eoan Ermine" 的 Ubuntu 19.10,此版本带来了许多新功能,包括姗姗来迟的 ZFS 文件系统. ZFS 是一个可扩展 ...

最新文章

  1. android中设置控件获得焦点 (转)
  2. 什么业务场景适合使用Redis?
  3. pywinauto 连接已经打开的程序 如:微信
  4. awbeci网站之技术篇
  5. android6.0升级名单,三星Android 6.0升级详细名单[多图]
  6. 解析XML的4种方式及优缺点比较
  7. Mr. Panda and Kakin(拓展欧几里得 + O(1)快速乘)
  8. openstack服务编排
  9. 本地程序部署服务器上出错
  10. outlook可以显示多少行文本_Linux学习从处理文本开始
  11. c++数据结构与算法 图
  12. 有管网气体消防系统小知识来啦
  13. php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
  14. 在html中加入高德地图,javascript高德地图放到网页中的方法
  15. 【基础巩固】文件流读写、大文件移动 FileStream StreamWriter File Path Directory/ ,m资料管理器(递归)...
  16. Ubuntu16.04搭建mtk6737 安卓7.0 MTK 编译环境搭建
  17. 【fpga里Verilog语言的小知识点】
  18. 浏览器的input禁用输入法
  19. SAP PR采购申请的审批策略
  20. BUU_re_[ACTF新生赛2020]rome

热门文章

  1. 啊哈哈哈哈 C#按日期生成文件夹,并在文件夹中写入文件
  2. vue路由小妙招用法
  3. python怎么爬虫潭州教育_用Python爬取整个学院MM的电话和QQ,爬虫这也太牛了!...
  4. 对圆柱面的曲面积分_计算对面积的曲面积分zds 圆柱面x^2+y^2=1介于平面z=0 和z=3之间的部分...
  5. 进制GB和GiB的区别
  6. PCIE/GPU/显卡参数性能查看工具搜集
  7. asp.net857全科门诊的就诊管理系统#毕业设计
  8. hmm隐马尔可夫真的那么难吗?
  9. 牛客 小米校招 分布式集群消息传递最短路模板题
  10. 微信开发者工具设置制表符大小为2