首页 > 其他分享 >杂项

杂项

时间:2024-05-01 09:44:38浏览次数:13  
标签:const matrix int long -- while 杂项

一些好的博客/技巧

学习博客

1.斜率优化 包含斜率优化的两种做法,一些例题。

2.static关键字用法详解

3.FFT

技巧

1.对于大量字符串输入的办法:stringstream 讲解

2.当一道题的数量超过 __int128 ,又不想写高精时,就可以用到 long double,它的范围在:\(1.2 \times 10^-4932 ~ 1.2 \times 10^4932\),虽然会掉精度,但对于:\(10 ^ {1000}\) 的数据还是绰绰有余。输出时要注意处理,因为如果直接输出 double 类型,就会出现:

//类型一:整数位很多
double x=12345678;
//类型二:小数位很多,有效小数位少
double y=0.00001234;

cout<<x<<endl;
cout<<y<<endl;

输出:

1.23457e+07
1.234e-05

我们要不让他输出科学计数法,可以加上 fixed 语句,然后要让它不保留小数部分,加上 setprecision(0)

详见:详解C++中fixed,setprecision(),setw()的用法

例题:P2687 [USACO4.3] 逢低吸纳Buy Low, Buy Lower

4.有关矩阵运算题的处理

  • 把矩阵都封装在结构体中
struct matrix{
	int a[5][5];
	void init()
	{
		
	}
	void .......
	{
    
	}
	.......
};
  • 初始化都是单位矩阵 \(I\)。

可以封装在结构体中。

for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=(i==j);

如可以手写出来可以用 const直接定义,会快一点。

const matrix I
{{
        {1,0,0,0,0},
        {0,1,0,0,0},
        {0,0,1,0,0},
        {0,0,0,1,0},
        {0,0,0,0,1}	
}};
  • 矩阵乘法可以用自定义符号方便的求出,这也封装在结构体里。
matrix operator*(const matrix y)const
{
	matrix c;
	c.init();
	for(int i=0;i<=4;i++)
	for(int j=0;j<=4;j++)
	for(int k=0;k<=4;k++)
	c.a[i][j]=(c.a[i][j]+1ll*a[i][k]*y.a[k][j]%mod)%mod;
	return c;
}

也可以在外面重载运算符:

matrix operator*(const matrix &a,const matrix &b)const
{
	matrix c;
	c.init();
	for(int i=0;i<=4;i++)
	for(int j=0;j<=4;j++)
	for(int k=0;k<=4;k++)
	c.x[i][j]=(c.x[i][j]+1ll*a.x[i][k]*b.x[k][j]%mod)%mod;
	return c;
}
  1. 关于树的直径的求法

先随便找一个点求每个结点的深度,然后把最深的那个结点作为根,再变量一遍,树的深度为直径。

求直径的路径:只用记录每个点的父亲,然后找到最深的那个结点一直向上找即可(就是一个单向链表)。

void dfs(int *dd ,int u,int fa)
{
	from[u]=fa;
	dd[u]=dd[fa]+1;
	for(int v : g[u])
	{
		if(v==fa)	continue;
		dfs(dd,v,u);
	}
}
int main()
{
	dfs(d,1,0);
	for(int i=1;i<=n;i++)	if(d[st]<d[i])	st=i;
	dfs(d,st,0);
	for(int i=1;i<=n;i++)	if(d[ans]<d[i])	ans=i;
	int len=d[ans];
	while(len--)	cout<<ans,ans=from[ans];
}

易错点

  1. 多测不清空,oi 一场空,但清空数组时注意范围,是清空 \(1\) 到 \(n\),还是 \(0\) 到 \(m\)。

  2. 有些题看似不用卡 long long,但在某些很小的地方要开。如特判时的语句时:

if(n*m>s)  return ;

但 \(n*m\) 爆了,要开 long long

if((long long)n*m>(long long)s)  return ;
  1. 莫队中四个 while 循环的顺序

保证正确的原则是 l<=r(注意\(l,r\)的大小顺序)。

最好记的是先扩大,也就是 --l, ++r,然后再缩小l++,r--

   while (l > a[i].l) add(c[--l]);
   while (r < a[i].r) add(c[++r]);
   while (l < a[i].l) del(c[l++]);
   while (r > a[i].r) del(c[r--]);

还有其他的一种
oi wiki


排序方式

一定要看清楚判断的先后级,是比较块的大小还是本身端点的大小,每个莫队的比较方式不一样。

还有要看清楚结构体的编号。

错误示范(来源)
P1903 [国家集训队] 数颜色 / 维护队列)

bool cmp(node2 a,node2 b)
{
	if(be[a.l]!=be[b.l])return be[a.l]<be[b.l];
	if(be[a.r]!=be[a.r])return be[a.r]<be[a.r]; 
	//改成 if(be[a.r]!=be[b.r])return be[a.r]<be[b.r];
	return a.t<b.t;
}

标签:const,matrix,int,long,--,while,杂项
From: https://www.cnblogs.com/hutongzhou/p/18169029

相关文章

  • 杂项:输入流和memcpy
    输入流c++中常用cin接受输入,在C中可以定义main函数intmain(intargv,char*argc)来接受参数数量和参数字符串在c++中可以通过接受字符串流的方式,分段处理输入的字符串//接受输入的字符串readtext123stringline;getline(cin,line);//变为输入流istringstreamiss(......
  • 数学——数论/杂项
    狄利克雷卷积前置下取整的性质$\left\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\right\rfloor=\lfloor\frac{a}{bc}\rfloor$。证明略。上取整的性质$\left\lceil\frac{\lceil\frac{a}{b}\rceil}{c}\right\rceil=\lceil\frac{a}{bc}\rceil$证明:$\left\lceil\fr......
  • 杂项
    c++相关杂项nullptrC语言中NULL定义为(void*)0,可以隐式转换为指针类型;但C++中NULL定义为0(强类型语言,void*不能转化为其他指针类型,因此修改了定义),可以隐式转换为整数类型和指针类型。为了解决函数重载时NULL的二义性,C++11中引入了nullptr关键字,表示空指针,可以隐式转换为任意......
  • 4.7 数组的读取和写入,type指令和一些杂项
    4.7数组的读取和写入,type指令和一些杂项可以通过wordptr将db转为dw,然后按照dw的方式去存储数据1.段名也可以把其地址赋给变量assumecs:codesg,ds:data,ss:stackdatasegmentdb12,34dw12,34db'helloworld'dataendsstacksegmentdb10d......
  • Android杂项知识记录
    Android启动流程:https://blog.csdn.net/xingyu19911016/article/details/120023396https://blog.csdn.net/ldxlz224/article/details/123238353init进程为第一个用户级别的进程,PID为1,它通过一系列的初始工作以及解析init.rc(一个脚本文件)文件构建出Android系统运行的初始......
  • ctfshow 杂项
    杂项签到:文件伪加密:确定是文件伪加密后就需要将其修改为无加密,方法很简单,就是将压缩源文件目录区的全局方式位标记(504B01 02 1400)后从0900改为0000。另一种方法,用zipcenop,将压缩包与其放在同一目录下,然后用cmd进入该目录,执行java-jarZipCenOp.jarr压缩包名称.z......
  • 杂项03
    后端问题1.@Controller和@Conponent的区别通常情况下我们认为二者没有太大的区别,两个注解都会使得被注解的类被加载到Spring容器中,被IOC容器管理;@Controller继承了@Conponent,具有@Conponent的功能,@Controller主要用于标记控制器类,它通常在SpringMVC应用程序中使用,用......
  • 杂项04
    个人项目用到的知识:增删改查,分页,高级查询,Vue+elementUI,Hutool工具包,登录功能,session跨域问题解决,登录拦截…一、后端项目构建1.后端环境搭建构建项目:个人项目是一个基于Springboot+Vue的前后端分离的项目建父项目,父项目是一个空项目,子模......
  • 杂项
    Spring测试一直记错怎么测试Spring方法依赖:junit依赖不需要,下面已经整合包括了<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.1.6.REL......
  • 【杂项】trick
    数区间颜色个数只数最左边的一个。维护时间戳来避免多次memset。树状数组上倍增-\(O(\logn)\)。P6619[省选联考2020A/B卷]冰火战士开始二分,设初始位置为\(r\),\(sum=\sum\limits_{i=1}^rtr_i\),要求的数记为\(ans\)。考虑依次跳\(2^{\logn},2^{\logn-1},.......