结构体类型快速驱魔运算及运算符的重载

下面得到这段代码可以用在很多地方:只需要自己修改下接Ok.

 1 struct Matrix
 2  {
 3     long long mat[N][N];
 4     Matrix operator*(const Matrix m)const//定义矩阵乘法的运算符*
 5     {
 6         Matrix tmp;
 7         for(int i = 0;i < n;i++)
 8         {
 9             for(int j = 0;j < n;j++)
10             {
11                 tmp.mat[i][j] = 0;
12                 for(int k = 0;k < n;k++)
13                 {
14                     tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;//这里需要重点掌握
15                     tmp.mat[i][j] %= MOD;
16                 }
17             }
18         }
19         return tmp;
20     }
21 };
22 long long Pow(Matrix &m,int k)
23 {
24     Matrix ans;
25     memset(ans.mat,0,sizeof(ans.mat));
26     for(int i = 0;i < n;i++)
27         ans.mat[i][i] = 1;
28     while(k)
29     {
30         if(k&1) ans = ans*m;//这里是以二进制形式转化的,需要细细体会
31         k >>= 1;
32         m = m*m;
33     }
34     long long sum = 0;
35     for(int i = 0;i < n;i++)
36     {
37         sum += ans.mat[i][i]%MOD;//这里需要注意,这里和先把所有数据加起来再取模是等价的。
38         sum %= MOD;
39     }
40     return sum;
41 }

结构体类型快速驱魔运算及运算符的重载

时间: 2024-08-07 18:07:37

结构体类型快速驱魔运算及运算符的重载的相关文章

自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}

一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct Student{ int num; char name[20]; char sex; int agel float score; char addr[30]; }; 结构体声明的一般形式: struct 结构体类型名 {成员列表}: 结构体类型名用作结构体类型的标志,上面的Student就是结构体类型名

语言中结构体变量和结构体类型的定义

1.结构体类型定义 定义方式1: Typedef struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 } *LinkList; 定义方式2: struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 }: Typedef struct  LNode  *LinkList; 以上两个定义方式是等价的,是将*LinkList定义

指向结构体类型的指针强制转换为指向另外一种结构体类型。会不会出现问题?

结构体和int等类型一样,都是数据类型.其他类型怎么转换,结构体就怎么转换,没有什么特殊的地方. 楼主可能想知道的不是结构体怎样强制转换这个问题吧,猜测,楼主想知道如下几个问题: 如果将一个结构体强制类型转换为另一个结构体(或者类型),那这个结构体的成员会怎样了? 如果将一个结构体强制类型转换为另一个结构体(或者类型),那么这个结构体成员的数值又会是什么了? 解答: 1.结构体的本质是:我们和C语言约定了一段内存空间的长短,及其内容的安排.假设下面两个结构体: struct A1 { int a

C语言中的系统时间结构体类型

在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:00:00时以来的秒数,精确度:秒:由函数time()获取: 该类型定义在头文件 /usr/include/sys/time.h 中: #define _TIME_T       typedef   long   time_t;             #endif 函数定义:time_t   tim

结构体类型重声明导致的bug一个

bug前提条件 当模块比较多,头文件较多,某个结构体类型会在当前模块中重新声明进而引用其成员,而不直接包含其他模块的头文件.这样的好处是不引入不需要的类型声明到此模块,头文件包含的交叉:坏处是,增加了bug的几率,耦合太大!比如下面一种情况发生而导致bug: 已知两个模块A和B,同一个结构类型struct node在两个模块中分别声明,其中B模块无意或者有意调整了结构类型中的某些域.那么这个时候,若B模块中引用A模块中此类型实例然后访问成员变量,就会引发bug!如下重现示例 bug重新示例代码

Swift2.0(6)结构体类型&枚举类型

结构体类型 基础数据类型都是结构体,如Int  Float Bool等,是Swift自带的并且作为开发基础供开发者使用 在Swift中,结构体(Struct)和类类型(Class)非常相似,结构体是值类型,类是引用类型. 定义格式: struct 名称 : 协议... { 属性和方法 } 如: struct Sword { var length:Int = 11 var name:String = "hello world" func description() { print(&qu

声明结构体类型

偶然发现代码里面有个未定一个结构体类型,形式如下: struct vas; 而在当前文件中又实现了其定义. 一开始不理解其意义,看完代码发现了其作用: 因为另一个包含了它的结构体的定义代码放在了struct vas定义的前面,前面的struct vas是为了告诉编译器,这个struct vas是定义了的,后面是其真正定义. #include <stdio.h> struct vas; struct devs{ struct vas vaa; char* name; int v; }; stru

你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName变量表示人的姓名.然而,现实世界是复杂的,仅仅使用基本数据类型是不足以描述这个复杂的现实世界的.例如,我们无法使用某个基本数据类型来描述人这个复杂事物,因为他不仅有姓名,还有身高.年龄和性别等属性需要描述.但是我们注意到,再复杂的事物也是由简单事物组成的.既然我们能用基本数据类型来描述简单事物,那么

(转载)你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物 3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName变量表示人的姓名.然而,现实世界是复杂的,仅仅使用基本数据类型是不足以描述这个复杂的现实世界的.例如,我们无法使用某个基本数据类型来描述人这个复杂事物,因为他不仅