原题: 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. MyBatis插入语句返回主键值

    插入语句xml代码: <insert id="insertUser" parameterType="com.spring.mybatis.po.User" ...

  2. HTML 编辑基础

    HTML  基础语言 打开DREAMWEAVER,新建HTML.. body的属性: bgcolor                页面背景色 background            背景壁纸.图 ...

  3. <input type="text"/>未输入时属性value的默认值--js学习之路

    在百度ife刷题是自己的一个错误引发了我对<input type="text"/>的学习. 先贴代码: <!DOCTYPE html> <html&g ...

  4. 同步推是如何给未越狱的IOS设备安装任意IPA的?

    工作准备: 1. 准备一台MAC 2. 拥有一份299企业证书, 然后按照下面步骤操作: 1. 把xxxx.ipa改成xxx.zip, 解压缩得到Payload文件夹 2. 替换Payload里的em ...

  5. 解析XML的几种方法之SAX解析

    假期总结不能停,坚持坚持....接下来总结一下XMl和json的解析和生成.. 解析XML的四种方法,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址: DOM:在现 ...

  6. iOS设计模式之组合模式

    组合模式(Composite) 基本理解 整体和部分可以一直对待. 组合模式:将对象组合成树形结构以表示"部分--整体"的层次结构.组合模式使得用户对单个对象和组合独享的使用具有一 ...

  7. JAVA基础学习day17--集合工具类-Collections

    一.Collection简述 1.1.Collection与Collections的区别 Collections是集合的静态工具类 Collection:是集合的顶级接口 二.Sort 2.1.sor ...

  8. 全球最低功耗蓝牙单芯片DA14580的软件体系 -层次架构和BLE消息事件处理过程

    在作者之前发表的<全球最低功耗蓝牙单芯片DA14580的系统架构和应用开发框架分析>.<全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗>.<全球最低功耗蓝牙单芯片 ...

  9. Git学习 --> 个人常用命令add,commit以及push

    Git命令行配置1 安装Github2 安装msysgit3 要配置用户名和油箱  git config --global user.name <用户名> 我的命令就是:git confi ...

  10. Java 实现多线程的三种方式

    import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main { pu ...