• 小技巧


    http://www.docin.com/p-686190550.html

    查看数组占用内存大小


    exit(0);

    搜索到答案后(只需一个答案)强制退出函数


    ios::sync_with_stdio(0);//cincout加速


    求最大值的最小化,直接联想到二分


    读入优化

    inline int read()
    {
        int k=1;int x=0;
        char c=getchar();
        while ((c<'0'||c>'9')&&c!='-')c=getchar();
        if(c=='-')
        k=-1,c=getchar();
        while(c>='0'&&c<='9')
        x=(x<<3)+(x<<1)+c-'0',c=getchar();
        return k*x;
    } 
    

    读入优化2

    inline char gc(){
        static char now[1<<16],*S,*T;
        if (T==S){
    		T=(S=now)+fread(now,1,1<<16,stdin);
    		if (T==S) 
    			return EOF;
    		}
        return *S++;
    }
    inline int read(){
        int x=0;char ch=gc();
        while(ch<'0'||ch>'9') ch=gc();
        while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();
        return x;
    }
    

    *** 输出优化***

    inline void print(long long x)
    {
        if(x<0)
    		{
    			putchar('-');
    			x=-x;
    		}
        if(x>9)
    		print(x/10);
        putchar(x%10+'0');
    }
    

    硬核优化

    #pragma GCC optimize(2)
    #pragma GCC optimize(3)
    #pragma GCC optimize("Ofast")
    #pragma GCC optimize("inline")
    #pragma GCC optimize("-fgcse")
    #pragma GCC optimize("-fgcse-lm")
    #pragma GCC optimize("-fipa-sra")
    #pragma GCC optimize("-ftree-pre")
    #pragma GCC optimize("-ftree-vrp")
    #pragma GCC optimize("-fpeephole2")
    #pragma GCC optimize("-ffast-math")
    #pragma GCC optimize("-fsched-spec")
    #pragma GCC optimize("unroll-loops")
    #pragma GCC optimize("-falign-jumps")
    #pragma GCC optimize("-falign-loops")
    #pragma GCC optimize("-falign-labels")
    #pragma GCC optimize("-fdevirtualize")
    #pragma GCC optimize("-fcaller-saves")
    #pragma GCC optimize("-fcrossjumping")
    #pragma GCC optimize("-fthread-jumps")
    #pragma GCC optimize("-funroll-loops")
    #pragma GCC optimize("-fwhole-program")
    #pragma GCC optimize("-freorder-blocks")
    #pragma GCC optimize("-fschedule-insns")
    #pragma GCC optimize("inline-functions")
    #pragma GCC optimize("-ftree-tail-merge")
    #pragma GCC optimize("-fschedule-insns2")
    #pragma GCC optimize("-fstrict-aliasing")
    #pragma GCC optimize("-fstrict-overflow")
    #pragma GCC optimize("-falign-functions")
    #pragma GCC optimize("-fcse-skip-blocks")
    #pragma GCC optimize("-fcse-follow-jumps")
    #pragma GCC optimize("-fsched-interblock")
    #pragma GCC optimize("-fpartial-inlining")
    #pragma GCC optimize("no-stack-protector")
    #pragma GCC optimize("-freorder-functions")
    #pragma GCC optimize("-findirect-inlining")
    #pragma GCC optimize("-fhoist-adjacent-loads")
    #pragma GCC optimize("-frerun-cse-after-loop")
    #pragma GCC optimize("inline-small-functions")
    #pragma GCC optimize("-finline-small-functions")
    #pragma GCC optimize("-ftree-switch-conversion")
    #pragma GCC optimize("-foptimize-sibling-calls")
    #pragma GCC optimize("-fexpensive-optimizations")
    #pragma GCC optimize("-funsafe-loop-optimizations")
    #pragma GCC optimize("inline-functions-called-once")
    #pragma GCC optimize("-fdelete-null-pointer-checks")
    

    线性筛素数

    #define SIZE 1000000
    int main()
    {
        int check[SIZE] = {0};//元素值为0代表是素数
        int prime[SIZE] = {0};
        int pos=0;
        int flag;
        for (int i = 2 ; i < SIZE ; i++)
        {
            if (!check[i])//如果是素数
                prime[pos++] = i;
    
            for (int j = 0 ; j < pos && i*prime[j] < SIZE ; j++)
            {
                check[i*prime[j]] = 1;//筛掉
                //标注一
                if (i % prime[j] == 0)
                    break;
            }
        }
    
        printf("%.2f", (double)clock()/CLOCKS_PER_SEC);
    
        return 0;
    }
    
    

    高精度压位

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
     
    #define p 8//要压的位数 
    #define carry 100000000//相应的10的P次方 用于进位 
    //这样如果要改变压位的位数只要改这里就可以 
    using namespace std;
     
    const int Maxn=50001;
     
    char s1[Maxn],s2[Maxn];
    int a[Maxn],b[Maxn],ans[Maxn];
     
    int change(char s[],int n[])//压位的核心部分 
    {
    	char temp[Maxn];//中间变量 记录每p位的数 
    	int len=strlen(s+1),cur=0;
    	while(len/p){//如果len大于等于p 
    		strncpy(temp,s+len-p+1,p);//从后面截出来p位数 
    		n[++cur]=atoi(temp);//把temp搞成数字 
    		len-=p;//继续下p位 
    	}
    	if(len){//如果最后len不是正好p的倍数 也就是还剩下点不够p位的 
    		memset(temp,0,sizeof(temp));
    		strncpy(temp,s+1,len);//全截下来 
    		n[++cur]=atoi(temp);//赋上 
    	}
    	return cur;//返回一个位数 
    }
    //这里就是(二)中的内容了 计算正常计算就行 
    int add(int a[],int b[],int c[],int l1,int l2)
    {
    	int x=0,l3=max(l1,l2);
    	for(int i=1;i<=l3;i++){
    		c[i]=a[i]+b[i]+x;
    		x=c[i]/carry;//进位 
    		c[i]%=carry;
    	}
    	while(x>0){c[++l3]=x%10;x/=10;}
    	return l3;//返回答案的位数 
    }
     
    void print(int a[],int len)
    { 
    	printf("%d",a[len]);//处理高位 
    	for(int i=len-1;i>=1;i--)printf("%0*d",p,a[i]);//输出p位 不足补0 
    	printf("
    ");
    }
     
    int main()
    {
    //	freopen("t.in","r",stdin);
    //	freopen("t.out","w",stdout);
    	scanf("%s%s",s1+1,s2+1);//读入两个字符串 
     
    	int la=change(s1,a);//将s1这个字符串转化为a这个整型数组 
    	int lb=change(s2,b);//同上 
    	
    	int len=add(a,b,ans,la,lb); 
    	//计算长度为la的a数组和长度为lb的b数组最后把答案赋给ans数组 并顺便计算出ans的长度(便于输出) 
    	print(ans,len);//输出函数 
    }
    

    建图

    void add(int u,int v,int w)
    {
        t[++num]=(node){ head[u],v,w };
        head[u]=num;
    }
    

    (a + b) % p = (a%p + b%p) %p (对)

    (a - b) % p = (a%p - b%p) %p (对)

    (a * b) % p = (a%p * b%p) %p (对)

    (a / b) % p = (a%p / b%p) %p (错)


  • 相关阅读:
    ESP8266 SDK开发
    硬件基础知识和典型应用-Altium Designer 加载SETP文件设置3D封装
    Golang 协程控制关闭
    Redis主从集群切换数据丢失问题
    Goroutine(协程)的理解
    堆和栈的概念和区别
    golang goroutine实现_golang中的Mutex设计原理详解(一)
    OpenCV cv::Mat.type() 以及各类型数据转换
    python 处理json
    python 文件|路径 常用方法
  • 原文地址:https://www.cnblogs.com/lvhuanzhu/p/10848101.html
Copyright © 2020-2023  润新知