标签:style blog http color strong os
原题: 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[44]; string ss[8] = {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"}; void init() { int n,i,j; sum[0] = 0; for(n=1;n<=44;n++) { int flag = n%7; int ans = 1; for(j=1;j<=n;j++) ans = (ans*flag)%7; sum[n] = ans; } for(i=1;i<=44;i++) sum[i] += sum[i-1]; } int main() { int i,j,t,n,ans; init(); scanf("%d",&t); while(t--) { scanf("%d",&n); ans = (((n/42)%7*(sum[42]%7))%7 + sum[n%42]%7)%7; cout<<ss[ans]<<endl; } return 0; }
第二种方法: 矩阵乘法
有待更新
2014 Super Training #4 G What day is that day? --两种方法,布布扣,bubuko.com
2014 Super Training #4 G What day is that day? --两种方法
标签:style blog http color strong os
原文地址:http://www.cnblogs.com/whatbeg/p/3819054.html