A-链接:https://www.nowcoder.com/acm/contest/71/A
来源:牛客网

给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y=kx,其中k为大于1的整数

输入描述:

第一行输入一个n
接下来一行输入n个正整数ai

输出描述:

  1. 输出符合条件个数
示例1

输入

  1. 5
  2. 1 2 3 4 5

输出

  1. 2

说明

  1. 5个数中12符合条件,1是后面每个数的因子,24的因子

备注:

  1. 1n,a1000000
  2.  
  3. 询问一个a[i]=x的整数倍(>1倍)是否也在数列中,统计x的个数;
    用类似筛法的写法,对于x,检查kx(k>1)是否为真,如果存在就累加所有的x,复杂度O(nlog(n));
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int z, n, v[];
  4. int main() {
  5. scanf("%d", &n);
  6. for (int i = ; i < n; i++) {
  7. int x;
  8. scanf("%d", &x);
  9. v[x]++;
  10. }
  11. for (int i = ; i <= ; i++) {
  12. for (int j = i + i; j <= ; j += i) {
  13. if (v[j] > ) {
  14. z += v[i];
  15. break;
  16. }
  17. }
  18. }
  19. printf("%d\n", z);
  20. }

B-链接:https://www.nowcoder.net/acm/contest/71/B
来源:牛客网

设s,t为两个字符串,定义f(s,t) = t的子串中,与s相等的串的个数。如f("ac","acacac")=3, f("bab","babab")=2。现在给出n个字符串,第i个字符串为si。你需要对,求出,由于答案很大,你只需要输出对 998244353取模后的结果。

输入描述:

  1. 第一行一个整数n
    接下来n行每行一个仅由英文字母构成的非空字符串,第i个字符串代表s

i

输出描述:

  1. n行,第i行输出

  1. 998244353取模的结果。
示例1

输入

  1. 1
  2. BALDRSKYKirishimaRain

输出

  1. 1

备注:

  1. 1 n 10

6

  1. ,所有字符串的总长度不超过2*10

6

  1. 说实话有点想骂人了,浪费我这么长时间一直以为自己kmp写傻逼了,最后把cout<<endl换成cout<<'\n'就能过全部数据我。。。。。。
    注意到除了长度最小的字符串S,只要比S大的那么这个i对应的那一行的输出必定是零,比S大或长度相同但内容不同自然不会匹配成功,有一个为零答案就是0
    然后再对S向所有的字符串都跑一遍kmp,复杂度是O(L),L为字符串总长度。
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define LL long long
  4. const int MAXN=;
  5. int MOD=;
  6. string str[MAXN],S;
  7. int f[MAXN*];
  8. int ans;
  9. int main()
  10. {
  11. ios::sync_with_stdio(false);
  12. cin.tie();
  13. int n,i,j,k;
  14. cin>>n;
  15. cin>>str[];
  16. S=str[];
  17. for(i=;i<=n;++i){
  18. cin>>str[i];
  19. if(str[i].length()<S.length())
  20. S=str[i];
  21. }
  22. ans=;
  23. f[]=-;
  24. j=-;
  25. for(i=;i<=S.length();++i){
  26. j=f[i-];
  27. while(j!=-&&S[i-]!=S[j])j=f[j];
  28. f[i]=j+;
  29. }
  30. for(i=;i<=n;++i){
  31. LL tmp=;
  32. int len=str[i].length();
  33. for(j=,k=;k<len;++k){
  34. if(S[j]==str[i][k]) j++;
  35. else{
  36. while(j!=-&&S[j]!=str[i][k])j=f[j];
  37. if(j!=-&&S[j]==str[i][k])j++;
  38. else j=;
  39. }
  40. if(j==S.length()){j=f[j];tmp++;}
  41. }
  42. ans=(LL)ans*tmp%MOD;
  43. if(!ans)break;
  44. }
  45. for(i=;i<=n;++i){
  46. if(str[i]==S)
  47. cout<<ans<<'\n';
  48. else
  49. cout<<<<'\n';
  50. }
  51. return ;
  52. }
  1.  

C-链接:https://www.nowcoder.com/acm/contest/71/C
来源:牛客网

小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An。尽管他计算非常精准,但很快他就弄混了自己的草稿纸,他找出了一些他计算的结果,但他忘记了这些都是数列中的第几项。

输入描述:

每行包括数列中的一项Ak(k<=100000)。

总行数T<=30。

输出描述:

对于每一项Ak,输出一行包括一个正整数k表示输入中数是数列的第几项。

示例1

输入

  1. 2
  2. 3
  3. 5
  4. 8
  5. 13

输出

  1. 2
  2. 3
  3. 4
  4. 5
  5. 6
    显然要用到大数,但想要计算前十万个数并且保存一定MLE了,我们只留下最多40位末尾的数,显然这样的话末尾四十位的计算一定是正确的,而前100000项末尾四十位全部相同的几率是很小的,
    大数一开始重载+莫名出bug,改成函数就好了。
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct Bign
  4. {
  5. int a[];
  6. Bign(){memset(a,,sizeof(a));}
  7. void print(){
  8. for(int i=a[];i>=;--i)
  9. printf("%d",a[i]);puts("");
  10. }
  11. }B[];
  12. Bign add(Bign A,Bign chs){
  13. int sz=max(A.a[],chs.a[]);
  14. for(int i=;i<=sz;i++){
  15. A.a[i]+=chs.a[i];
  16. if(A.a[i]>){
  17. A.a[i+]++;
  18. if(i+>sz) A.a[]=++sz;
  19. A.a[i]%=;
  20. }
  21. }
  22. return A;
  23. }
  24. bool ok(Bign A,Bign B){
  25. if(A.a[]!=B.a[]) return ;
  26. for(int i=;i<=A.a[];++i){
  27. if(A.a[i]!=B.a[i]) return ;
  28. }
  29. return ;
  30. }
  31. string s;
  32. int main()
  33. {
  34. B[].a[]=B[].a[]=;
  35. B[].a[]=;
  36. B[].a[]=;
  37. for(int i=;i<=;++i){
  38. B[i]=add(B[i-],B[i-]);
  39. if(B[i].a[]>){
  40. for(int j=;j<=B[i].a[];++j)
  41. B[i].a[j]=;
  42. B[i].a[]=;
  43. }
  44. }
  45. //B[100000].print();
  46. while(cin>>s){//B[1000].print();
  47. Bign x;
  48. int n=s.size();
  49. if(n>)n=;
  50. reverse(s.begin(),s.end());
  51. x.a[]=n;
  52. for(int i=;i<=n;++i)
  53. x.a[i]=s[i-]-'';
  54. for(int i=;;i++){
  55. if(ok(x,B[i])){
  56. cout<<i<<endl;
  57. break;
  58. }
  59. }
  60. }
  61. return ;
  62. }

牛客比赛-Wannafly9-A/B/C的更多相关文章

  1. 牛客比赛-假的字符串-Trie+拓扑

    链接:https://www.nowcoder.com/acm/contest/59/B来源:牛客网 题目描述 给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个 ...

  2. 牛客比赛-状压dp

    链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意 ...

  3. 牛客寒假算法基础集训营3B 处女座的比赛资格(用拓扑排序解决DAG中的最短路)

    链接:https://ac.nowcoder.com/acm/contest/329/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  4. 牛客OI周赛9-提高组题目记录

    牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...

  5. 牛客练习赛43 Tachibana Kanade Loves Game (简单容斥)

    链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 题目描述 立华奏是一个天天打比赛的萌新. 省选将至,萌新立华奏深知自己没有希望进入省队,因此开始颓 ...

  6. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)

    链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 QingyuQingyu 当 ...

  7. 牛客练习赛28 B数据结构(线段树)

    链接:https://www.nowcoder.com/acm/contest/200/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)

    链接:https://www.nowcoder.com/acm/contest/197/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  9. 牛客网NOIP赛前集训营-提高组(第一场)

    牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...

随机推荐

  1. 模块 - json/pickle/shelve/xml/configparser

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 为什么要序列化: 有种办法可以直接把内存数据(eg:10个列表,3 ...

  2. Python基础教程-条件判断和循环

    Python条件判断 在Python中用if语句实现: age = 20 if age >= 18: print 'your age is :',age print 'adult' 根据Pyth ...

  3. tomcat 日志目录 介绍

    [root@mysql tomcat]# ll 总用量 drwxr-x---. root root 11月 : bin -rw-r-----. root root 11月 : BUILDING.txt ...

  4. 009-shiro与spring web项目整合【三】验证码、记住我

    一.验证码 1.自定义FormAuthenticationFilter 需要在验证账号和名称之前校验验证码 /** * * <p>Title: CustomFormAuthenticati ...

  5. SIP穿越NAT SIP穿越防火墙-SBC

    FireWall&NAT FireWall是一种被动网络安全防卫技术,位于网络的边界.在两个网络之间运行訪问控制策略.防止外部网络对内部信息资源的非法訪问,也能够阻止特定信息从内部网络被非法输 ...

  6. MariaDB备份之XtraBackup

    一.XtraBackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtrabd数据库进行热备的工具.特点: (1)备份过程快速.可靠: ...

  7. appium实现adb命令 截图和清空EditText

    原文地址http://www.cnblogs.com/tobecrazy/p/4592405.html 原文地址http://www.cnblogs.com/tobecrazy/ 该博主有很多干货,可 ...

  8. Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找

    Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找 //查找是否存在 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Cre ...

  9. [MongoDB] 学习笔记(2)

    1. Mac 安装mongodb: 官网下载mac版mongodb,解压到本地目录,如/Applications/mongodb,注意这里的地址是根更目录下的Applications,然后在根目录下创 ...

  10. boot空间不足,删除Ubuntu旧内核

    0 Problem 今天打开电脑的时候ubuntu提示boot空间不足.查了资料,原来Ubuntu的自动升级并没有删除系统的旧内核,于是boot下旧的内核文件越积越多,最后就满了. 1 Solutio ...