原题: ZOJ 3785 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3785

题意:当天是星期六,问经过1^1+2^2+3^3....+n^n天后是星期几?

这题开始以为是这种式子的求和问题,翻了半天没翻到公式。结果没搞出来。后来发现有两种方法。

第一种方法: 找规律

打表可以看出,这些数的结果出现42一循环,所以直接就处理出前42个,后面的就用前面的。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
#define N 20007 int sum[];
string ss[] = {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};\ void init()
{
int n,i,j;
sum[] = ;
for(n=;n<=;n++)
{
int flag = n%;
int ans = ;
for(j=;j<=n;j++)
ans = (ans*flag)%;
sum[n] = ans;
}
for(i=;i<=;i++)
sum[i] += sum[i-];
} int main()
{
int i,j,t,n,ans;
init();
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans = (((n/)%*(sum[]%))% + sum[n%]%)%;
cout<<ss[ans]<<endl;
}
return ;
}

第二种方法: 矩阵乘法

先把底数对7取模,得出1^1+1^8+1^15+...+ 2^2+2^9+2^16+...

然后就可以分成7组,分别用矩阵加速计算结果,关键就在矩阵的构造了,这个构造我也没太搞懂:

    摘自AB的博客。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 107 char s[][]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"}; struct Matrix
{
int m[][];
}; Matrix Mul(Matrix a,Matrix b)
{
Matrix c;
memset(c.m,,sizeof(c.m));
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
c.m[i][j] += ((a.m[i][k]*b.m[k][j])% + )%;
return c;
} int fastm(int a,int b)
{
int res = ;
while(b)
{
if(b&)
res = (res*a)%;
a = (a*a)%;
b >>= ;
}
return res;
} Matrix MPow(Matrix &res,Matrix a,int n) //第二种写法
{
while(n)
{
if(n&)
res = Mul(res,a);
n>>=;
a = Mul(a,a);
}
return res;
} int main()
{
Matrix res,tmp;
int t,n,i;
int sum,num;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
sum = ;
for(i=;i<=;i++)
{
res.m[][] = res.m[][] = fastm(i,i)%;
res.m[][] = res.m[][] = ;
tmp.m[][] = tmp.m[][] = fastm(i,)%;
tmp.m[][] = ;
tmp.m[][] = ;
num = n/;
if(n% >= i)
num++;
if(num > )
{
num--;
MPow(res,tmp,num);
sum = (sum + res.m[][])%;
}
}
printf("%s\n",s[sum]);
}
return ;
}

2014 Super Training #4 G What day is that day? --两种方法的更多相关文章

  1. 2014 Super Training #8 G Grouping --Tarjan求强连通分量

    原题:ZOJ 3795 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3795 题目大意:给定一个有向图,要求把点分为k个集 ...

  2. 2014 Super Training #10 G Nostop --矩阵快速幂

    原题: FZU 2173 http://acm.fzu.edu.cn/problem.php?pid=2173 一开始看到这个题毫无头绪,根本没想到是矩阵快速幂,其实看见k那么大,就应该想到用快速幂什 ...

  3. 2014 Super Training #6 G Trim the Nails --状态压缩+BFS

    原题: ZOJ 3675 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3675 由m<=20可知,可用一个二进制数表 ...

  4. 2014 Super Training #7 C Diablo III --背包问题(DP)

    原题: ZOJ 3769 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3769 一个带有一些限制的背包问题. 假设在没有限 ...

  5. 2014 Super Training #10 C Shadow --SPFA/随便搞/DFS

    原题: FZU 2169 http://acm.fzu.edu.cn/problem.php?pid=2169 这题貌似有两种解法,DFS和SPFA,但是DFS怎么都RE,SPFA也要用邻接表表示边, ...

  6. 2014 Super Training #9 E Destroy --树的直径+树形DP

    原题: ZOJ 3684 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3684 题意: 给你一棵树,树的根是树的中心(到其 ...

  7. 2014 Super Training #6 F Search in the Wiki --集合取交+暴力

    原题: ZOJ 3674 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3674 题意不难理解,很容易想到用暴力,但是无从下 ...

  8. 2014 Super Training #9 F A Simple Tree Problem --DFS+线段树

    原题: ZOJ 3686 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3686 这题本来是一个比较水的线段树,结果一个ma ...

  9. 2014 Super Training #6 B Launching the Spacecraft --差分约束

    原题:ZOJ 3668 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3668 典型差分约束题. 将sum[0] ~ sum ...

随机推荐

  1. PHP学习笔记:用mysqli连接数据库

    小插曲,晚上把数据的my.ini编码改为utf-8,然后数据库一直不能启动,改回gbk就可以,有知道的告知下问题所在. 因为是链接数据库,也没什么好说明的,直接上代码吧. <?php /* Co ...

  2. HttpController的激活

    Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道的最终需要激活目标HttpController对象.调用请求的URI会携带目标Http ...

  3. 六个创建模式之单例模式(Singleton Pattern)

    定义: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.三个特点:一个类只有一个实例:必需自己创建这个实例:必需自行向整个系统提供这个实例. 结构图: Singleton:单例类,提 ...

  4. 「C语言」int main还是void main?

    从大一入学刚接触C到现在已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深刻理解为什么不能用```void main```而必须使用```int main```. ...

  5. gulp学习

    中文文档:http://www.gulpjs.com.cn/docs/api/ 一.gulp的API 1 gulp.src(); 这个方法是用来获取流的,但这个流里的内容不是原始的文件流,而是一个虚拟 ...

  6. 设置ArcGIS的外观改回到出厂

    在一般的软件中,都可以在工具-选项中打开相关设置将应用程序的外观改回到出厂.但ArcGIS好像没有,但查帮助文档原来是这样: 配置的更改保存在模板文档中(例如,ArcMap 将其更改保存在 Norma ...

  7. android在Data目录内置可删除的APP

    一.准备工作:make_ext4fs.mkuserimg.sh.simg2img,把它们跟要修改的 .img.ext4(或.img)文件放置到同一个目录下 二.转换源文件为img格式( .img则略过 ...

  8. IOS单例

    单例就是只有一个实例. 两种常见的创建方法: 1. : static A *a = nil; + (A *)shareInstance { if (!a) a = [[self alloc] init ...

  9. iOS开发~UI布局(三)深入理解autolayout

    一.概要 通过对iOS8界面布局的学习和总结,发现autolayout才是主角,autolayout是iOS6引入的新特性,当时还粗浅的学习了下,可是没有真正应用到项目中.随着iOS设备尺寸逐渐碎片化 ...

  10. C# 两个Object比较

    C#两个Object进行比较,Object里只是简单属性,不存在层级关系还比较好处理,如果遇到多层级的就有点麻烦. 1.简单Object比较 /// <summary> /// 比较字段 ...