2020-09-17(模板)

小知识点

常用的数学函数

1.|x| abs(x) 求整数的绝对值,参数类型为int;
2.|x| fabs(x) 求实数的绝对值,参数类型为double;
3.√x sqrt(x)
4.e^x exp(x)
5.lnx log(x)
6.lgx log10(x)
7.x^y pow(x,y)
8.10^x pow(10,x)
9.sinx sin(x)
10.cosx cos(x)

输出格式

1. %d 以十进制输出带符号整数(正数不输出符号)
2. %o 以八进制输出 (不输出前缀0)
3. %x %X 以十六进制输出 (不输出前缀0X)
4. %u 以十进制输出无符号整数
5. %f 以小数形式输出单,双精度实数
6. %e %E 以指数形式输出单,双精度实数
7. %g %G
8. %c 输出单个字符
9. %s 输出字符串

易忘提醒

1 %md 表明以宽度m输出数值;
2 %-md 结果左对齐
3 %0md 结果空位用0补齐

字符串处理

1,puts(); //输出一个字符串(字符数组)
2,gets(); //输入字符串
3,strcpy(); //字符串复制,
eg: strcpy(c1,c2);// 将c2复制到c1中;
4,strcat(); //连接字符串
5,strcmp(); //比较字符串
6,strlen(); //检测字符串长度
7,strlwr(); //字符串改成小写
8,strupr(); //字符串改成大写

快速幂模板

快速幂求(a^b)%n

int quickPow(int a,int b,int n){
    if(b==1) return a;
    if(b%2==0){//b是偶数
    int t=quickPow(a,b/2,n);
    return t*t%n;
    }else{   //b是奇数
      int t=quickPow(a,b/2,n);
      t=t*t%n;
      t=t*a%n;
      return t;
     }
}
非递归形式
int quickPow(int a,int b,int n){
    int ret=1;
    while(b){
    if(b%2==1) ret=ret*a%n;
    a=a*a%n;
    b=b/2;
    }
  return ret;
 }

质数的判定

注意:1既不是质数,也不是合数;2是最小的质数, 且为唯一的偶质数。

kmp模板


void get_next()
{
	int k=-1,i=0;
	
	nextt[0]=-1;
	while(i<la)
	{
		if(k==-1||a[i]==a[k])
		{
			i++;
			k++;
			nextt[i]=k;
		}
		else
		k=nextt[k];
	}
	return ;
}

int kmp()
{
	int i=0,k=0,ans=0;
	while(i<lb)
	{
		if(k==-1||a[k]==b[i])
		{
			i++;k++;
		}
		else
		k=nextt[k];
		if(k==la)
		{
			ans++;
			k=nextt[k];
		}
	}
	return ans;
}

马拉车模板

求最长回文子串
void malache()
{
	int k=0;
	c[k++]='$';
	c[k++]='#';
	for(int i=0;i<l;i++)
	{
		c[k++]=a[i];
		c[k++]='#';
	 }
	 int mx=0,id=0;
	 for(int i=0;i<k;i++)
	 {
	 	mp[i]=mx>i?min(mp[2*id-i],mx-i):1;
		 while(c[i+mp[i]]==c[i-mp[i]])
		 {
		 	mp[i]++;
		  } 
		  if(i+mp[i]>mx)
		  {
		  	mx=i+mp[i];
		  	id=i;
		  }
	 } 
}
int main()
{
	while(~scanf("%s",a))
	{
		l=strlen(a);
		malache();
		int ans=0;
		for(int i=0;i<2*l+2;i++)
		{
			ans=max(ans,mp[i]-1);
		}
		printf("%d\n",ans);
	} 
 } 

二分模板

int Erfen(int l,int r)
{
	int l,r=n,ans;
	while(l<=r)
	{
		int mid(l+r)>>1;
		if(check(mod))//如果满足要求 
		{
			ans=mid;
			l=mid+1; 
		}
		else
		{
			r=mid-1;
		 } 
	}
	return ans;
} 
实数域上的二分
double Erfen(double l,double r)//dlt=0.001(根据题目要求决定精度) 
{
	while(fabs(l-r)>dlt)
	{
		double mid(l+r)/2.0;
		if(check(mod))//如果满足要求 
		{
			r=mid;
		}
		else
		{
			l=mid;
		 } 
	}
	return l;
} 

线段树模板

链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值