HDU 1757 A Simple Math Problem

题意:给出a0~a9和k、m, f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10); 求f(k)%m。

思路:

矩阵A                  矩阵B

0 1 0 0 0 0 0 0 0 0        f0         f1 

0 0 1 0 0 0 0 0 0 0        f1         f2

0 0 0 1 0 0 0 0 0 0        f2         f3    

0 0 0 0 1 0 0 0 0 0      *      f3 ---------->    f4

0 0 0 0 0 1 0 0 0 0          f4         f5

0 0 0 0 0 0 1 0 0 0        f5         f6

0 0 0 0 0 0 0 1 0 0        f6           f7

0 0 0 0 0 0 0 0 1 0        f7         f8

0 0 0 0 0 0 0 0 0 1        f8           f9

a9 a8 a7 a6 a5 a4 a3 a2 a1 a0   f9         f10

我们看到规律了,每次要到下次个A*B,以此类推则由A*A*A.......A*B;

矩阵建好了,题就好做了。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757

 

View Code
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <string>
 5 #include <algorithm>
 6 #include <iostream>
 7 using namespace std;
 8 const int N=11;
 9 
10 typedef struct In{
11     int m[N][N];
12 }Matrix;
13 Matrix init,unit;
14 int k,m;
15 int a[N];
16 
17 void Init(){
18     for(int i=1;i<N;i++){
19         for(int j=1;j<N;j++){
20             if(i==j-1) init.m[i][j]=1;
21             else init.m[i][j]=0;
22             unit.m[i][j]=(i==j);
23         }
24     }
25     for(int i=1;i<N;i++)
26         init.m[10][i]=a[N-i];
27 }
28 
29 Matrix Mul(Matrix a,Matrix b){
30     Matrix c;
31     for(int i=1;i<N;i++){
32         for(int j=1;j<N;j++){
33             c.m[i][j]=0;
34             for(int k=1;k<N;k++){
35                 c.m[i][j]+=a.m[i][k]*b.m[k][j];
36                 c.m[i][j]%=m;
37             }
38         }
39     }
40     return c;
41 }
42 
43 Matrix Pow(Matrix a,Matrix b){
44     while(k){
45         if(k&1) b=Mul(a,b);
46         a=Mul(a,a);
47         k>>=1;
48     }
49     return b;
50 }
51 
52 int main(){
53     
54 //    freopen("data.in","r",stdin);
55 //    freopen("data.out","w",stdout);
56     
57     while(scanf("%d%d",&k,&m)!=EOF){
58         for(int i=1;i<N;i++) scanf("%d",&a[i]);
59         if(k<10){
60             printf("%d\n",k%m);
61             continue;
62         }
63         k-=9;
64         Init();
65         Matrix x=Pow(init,unit);
66         int sum=0;
67         for(int i=1;i<N;i++) sum=(sum+x.m[10][i]*(i-1))%m;
68         printf("%d\n",sum);
69     }
70     return 0;
71 }

 

img id=

转载于:https://www.cnblogs.com/Hug-Sea/articles/2478258.html

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值