URAL 2048 Histroy

因为年历是400年一个循环节的,所以递推出一年的情况,然后递推处理出一个循环节的情况。对于询问,求一个类似前缀和的东西就好了。

写得时候注意变量的定义。。。不然WA到哭。。。我是以6代表星期5的,1900年是第一年,所以B,A减去1900之前要加一。

#include<cstdio>
#include<cstring>

bool isLeapYear(int y)
{
   if(y%100){
      return !(y&3);
   }
   else {
      return !(y%400);
   }
}
               // 1    3     5     7   8    10    12
int days[] = {-1,31,28,31,30,31,30,31,31,30,31,30,31};
//6 7 1 2 3 4 5
int cnt1[7];//1~2月
int cnt2[7];//2月以后
int cnt[7];

//1900
void firstYear()
{
   int v = 0;
  for(int m = 1; m <= 2; m++) {
      cnt1[v]++;
      v = (v+days[m])%7;
  }
  for(int m = 3; m <= 12; m++) {
      cnt2[v]++;
      v = (v+days[m])%7;
  }
  for(int i = 0; i < 7; i++) {
      cnt[i] = cnt1[i]+cnt2[i];
  }
}

int cnt400[401][13];
int cntCur[7];

void circle()
{
   firstYear();
   int mov = 0;
   int i = 1;//1900
   for(int y = 1900; y < 2300; y++,i++){//1,1 +mov1 1,2 2->last 1
      memset(cntCur,0,sizeof(cntCur));
      if(isLeapYear(y)) {
         for(int i = 0; i < 7; i++)//2月以前不受影响
            cntCur[i] += cnt1[(i-mov+7)%7];
         mov = (mov + 1)%7;//相对上一年
         for(int i = 0; i < 7; i++)
            cntCur[i] += cnt2[(i-mov+7)%7];

      }
      else {
         for(int i = 0; i < 7; i++)
            cntCur[i] += cnt[(i-mov+7)%7];
      }
      mov = (mov + 1)%7;//365%7 =1
      for(int j = 0; j < 13; j++){
        cnt400[i][j] = cnt400[i-1][j];
      }
      cnt400[i][cntCur[6]]++;
   }
}

int ans[13];
//#define local
int main()
{
#ifdef local
    freopen("data.txt","w",stdout);
#endif // local
   int A,B;
   circle();
   scanf("%d%d",&A,&B);
        B++;A++;
        int a = (A-1-1900)%400;
        int na = (A-1-1900)/400;
        int b = (B-1900)%400;
        int nb = (B-1900)/400;
        for(int i = 0; i < 13; i++){
            ans[i] += (nb-na)*cnt400[400][i] + cnt400[b][i] - cnt400[a][i];
        }
    for(int i = 0; i < 13; i++)
      printf("%d: %d\n",i,ans[i]);

    return 0;
}
时间: 2024-12-07 19:56:28

URAL 2048 Histroy的相关文章

Ural 1081 Binary Lexicographic Sequence(DP)

题目地址:Ural 1081 先用dp求出每个长度下的合法序列(开头为1)的个数.然后求前缀和.会发现正好是一个斐波那契数列.然后每次判断是否大于此时长度下的最少个数,若大于,说明这一位肯定是1,若小于,则肯定是0.就这样不断输出出来即可. 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #in

cocos2d-x 3.2 之 2048 —— 第四篇 ★ 核心 ★

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 大家十一过得肿么样啊~ 我现在的情况就是--每逢佳节 胖三斤 啊 ,胖三斤..o(╯□╰)o.. 好了,继续做2048, 这是第四篇啦~ 这篇的内容就是对触摸的处理哟~ 就是,你上下左右滑动,相应移动~ 我们先在 游戏的宏定义类 中,建立一个枚举方向变量: Game

URAL 1684. Jack&#39;s Last Word KMP

题目来源:URAL 1684. Jack's Last Word 题意:输入a b 把b分成若干段 每一段都是a的前缀 思路:b为主串 然后用a匹配b 记录到b的i位置最大匹配的长度 然后分割 分割的时候要从后往前 如果a = abac b = abab 那么如果从前往后 首先覆盖了aba 然后b就不能覆盖了 从后往前就可以了 首先覆盖ab 下一次还是ab 因为已经记录了到i位置的最大匹配长度 根据长度从末尾倒退 每次倒退的时候只要是最大的匹配的长度 因为如果在某一次的递推 记录的最大匹配的前缀

麦子学院ios笔记:Objective-C 实现2048算法类

今天麦子学院ios开发老师给大家介绍Objective-C 实现的IOS版小游戏2048算法类,十分的实用,有需要的小伙伴可以参考下. 参数model有一个二维数组data,及阶数matrix // .h文件 @classDataModel; @interfaceAlgorithm : NSObject @property(nonatomic,assign)intaddScore;// 加分 - (void)caculateTop:(DataModel *)model;// 上滑规则 - (vo

2048 C++实现

1 #include <iostream> 2 #include <windows.h> 3 #include <ctime> 4 using namespace std; 5 6 int const ROW = 4; 7 int const COL = 4; 8 int game[ROW][COL] = {0}; 9 10 //上下左右 11 int const UP = 1; 12 int const DOWN = 2; 13 int const LEFT = 3;

200行Python代码实现2048

200行Python代码实现2048 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令 GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器 3. 环境使用 使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操

自带CA ,sha256 哈希签名,2048 位加密 脚本,通用

直接上代码 mkdir ssl cd ssl mkdir demoCA cd demoCA mkdir newcerts mkdir private touch index.txt echo '01' > serial function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N) echo $(($num%$max+$min)) } rnd=$(rand 10 50) echo $rnd touch /etc/pki/CA/index.

python写2048小游戏

#!/usr/bin/env python # coding=utf-8 #******************************************************** # > OS : Linux 3.2.0-60-generic #91-Ubuntu # > Author : yaolong # > Mail : [email protected] # > Time : 2014年06月01日 星期日 13:13:39 #******************

max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

# cat /etc/security/limits.d/90-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 2048 root soft nproc unlimited #在这里修改