zoukankan      html  css  js  c++  java
  • 20200908 day3 刷题记录

    代码背诵:素数筛,素数判断,质因数分解,逆元

    1 逆元

    代码:

    inv[1]=1;
    for(int i=1;i<=n;i++){
    	inv[i]=(p-p/i)*inv[p%i]%p;
    }
    

    2 1008 放球

    题意

    共m个球,第k个箱子里放(2^k)或不放,恰好放完,求方案。

    题解

    转化为二进制,每一位上的0或1表示是否放。

    未AC原因

    二进制理解不熟练,尝试使用递归和动态规划未果

    代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    int quick_pow(int x,int y){
      if(y==0) return 1;
      if(y==1) return x;
      if(y%2==0){
        y/=2;
        return quick_pow(x,y)*quick_pow(x,y);
      }
      if(y%2!=0){
        y/=2;
        return quick_pow(x,y)*quick_pow(x,y)*x;
      }
    }
    
    
    int main()
    {
      int m,i=0;
      scanf("%d",&m);
      while(m>=1){
        int a = m % 2;
        if(a){
          int b = pow(2,i);
          printf("%d:%d
    ",i,b);
        }
        else{
          printf("%d:0
    ",i);
        }
        i++;
        m >>= 1;
      }
      return 0;
    }
    
    

    3 1010 求级数和

    题意

    给定(N),求(S)(S=dfrac{1}{1!}+dfrac{1}{2!}+...+dfrac{1}{N!})

    题解

    模拟。高精度浮点数

    理解

    加上一个极其小的数????????????????

    代码

    #include<cstdio>
    int n,i;
    double jiecheng,ans;
    
    int main(){
    scanf("%d",&n);
    jiecheng=1;
    for (int i=1;i<=n;i++){
    jiecheng=jiecheng*i;
    ans+=(1/jiecheng)+0.000000000000000003;
    }
    printf("%.15f",ans);
    return 0;
    }
    

    4 KMP

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    #define maxn 1000010
    int kmp[maxn];
    int la,lb,j;
    char a[maxn],b[maxn];
    int main(){
      scanf("%s %s",a+1,b+1);
      la=strlen(a+1);
      lb=strlen(b+1);
      for(int i=2;i<=lb;i++){
        while(j&&b[i]!=b[j+1]) j=kmp[j];
        if (b[j+1]==b[i]) j++;
        kmp[i]=j;
      }
      j=0;
      for(int i=1;i<=la;i++){
        while(j>0&&b[j+1]!=a[i]) j=kmp[j];
        if(b[j+1]==a[i]) j++;
        if(j==lb) {
          printf("%d 
    ",i-lb+1);j=kmp[j];
        }
      }
      for(int i=1;i<=lb;i++){
        printf("%d ",kmp[i]);
      }
      return 0;
    }
    

    5 1013 周期串

    题意

    求字符串最小周期
    abab:2,aaaa:1,abcd:4

    题解

    从1枚举最小周期,依次判断是否符合题意(可以通过若干次字符串pos和delete,或者循环方法实现)。
    时间复杂度(O(N^2)),空间复杂度(O(N))

    理解

    字符串该复习了

    #include<cstdio>
    #include<cstring>
    char s[305];
    int len,t;
    
    bool pan(int a){
    if (len % a != 0) return false;
    for (int i=a+1;i<len;i++) if (s[i]!=s[i%a]) return false;
    return true;
    }
    
    
    int main(){
    scanf("%s",s);
    len=strlen(s);
    t=1;
    while (!pan(t)) ++t;
    printf("%d",t);
    return 0;
    }
    
    要做就做南波万
  • 相关阅读:
    [转]Android Permission(授权)大全
    ubuntu改中文
    [转]dip, dp, px, sp区别
    【转】关于Android4.0 emulatorarm.exe应用程序错误,内存不能为"read"问题解决方法
    SharedPreferences 的用法
    [转]深入研究java.lang.ThreadLocal类
    [转]Android 中Parcelable的作用
    HierarchyView
    使用Silverlight Toolkit中的主题(Theme)
    Split参数StringSplitOptions.RemoveEmptyEntries的使用
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/20200908day3-001.html
Copyright © 2011-2022 走看看