ZOJ3944 People Counting ZOJ3939 The Lucky Week (模拟)

ZOJ3944 People Counting

ZOJ3939 The Lucky Week

1.PeopleConting

题意:照片上有很多个人,用矩阵里的字符表示。一个人如下:

.O.
/|(.)
占3*3格子,句号“.”为背景。没有两个人完全重合。有的人被挡住了一部分。问照片上有几个人。

题解:

先弄个常量把3*3人形存起来,然后6个部位依次找,比如现在找头,找到一个头,就把这个人删掉(找这个人的各个部位,如果在该部位位置的不是这个人的身体,就不删),删成句号,疯狂找就行了。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4
 5 const int MAXN=111;
 6 const char man[3][3] = {    {‘.‘,‘O‘,‘.‘},
 7                             {‘/‘,‘|‘,‘\\‘},
 8                             {‘(‘,‘.‘,‘)‘}};
 9 const int X[6] = {0,1,1,1,2,2};
10 const int Y[6] = {1,0,1,2,0,2};
11 char a[MAXN][MAXN];
12
13 int n,m;
14
15 void delMan(int x,int y,int k){
16     int mx,my;
17     mx = x - X[k];
18     my = y - Y[k];
19     int i;
20     for(i=0; i<6; i++){
21         if(a[mx+X[i]][my+Y[i]]==man[X[i]][Y[i]]){
22             a[mx+X[i]][my+Y[i]] = ‘.‘;
23         }
24     }
25 }
26
27 int farm(){
28     int i,j,k;
29     int sum=0;
30     for(k=0; k<6; k++){
31         char now = man[X[k]][Y[k]];
32         for(i=0; i<n; i++){
33             for(j=0; j<m; j++){
34                 if(a[i][j]==now){
35                     sum++;
36                     delMan(i,j,k);
37                 }
38             }
39         }
40     }
41     return sum;
42 }
43
44 int main() {
45     int T,i,j;
46     scanf("%d",&T);
47     while(T--) {
48         scanf("%d%d",&n,&m);
49         for(i=0; i<n; i++)
50             for(j=0; j<m; j++) {
51                 scanf(" %c",&a[i][j]);
52             }
53         printf("%d\n",farm());
54     }
55 }

2.The Lucky Week

题意:一个月的1号或者11号或者21号是星期一的话,这个星期就是Lucky Week。求从起始日期开始的第n个LuckyWeek是几号开始的。(起始日期当作第一个LuckyWeek)。

题解:日期太大,不能暴力,要找规律。打表观察,发现400年是一个周期,也就是如果今年4月11号是LuckyWeek,400年后,4月11号又是LuckyWeek。

这样如果跨越了若干的400年,就只用算一次400年,其他的直接算出来。

代码:

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4
  5 const int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  6
  7 int Y,M,D,n;
  8
  9 inline bool isRun(const int &year) {
 10     return (year%4==0 && year%100!=0) || (year%400==0);
 11 }
 12
 13 int getDays(int year,int month) {
 14     if(month!=2)return md[month-1];
 15     if(isRun(year))return 29;
 16     else return 28;
 17 }
 18
 19 void beNextMonth(int &y,int &m,int &d,int &we) {
 20     int days = getDays(y,m);
 21     int cha = days + 1 - d;
 22     m++;
 23     if(m>12) {
 24         y++;
 25         m=1;
 26     }
 27     d=1;
 28     we = (we+cha)%7;
 29 }
 30
 31 int daBiao() {
 32     int y=2016, m=4, d=11;
 33     int we=0;
 34     int edy=2417,edm=1;
 35     int sum=0;
 36     while(!(y==edy && m==edm)) {
 37         for(int i=0; i<=20; i+=10)
 38             if((we+i)%7==0) {
 39                 if(y>=2017)sum++;
 40 //                if(y==2016 || y==2416)printf("%d-%d-%d\n",y,m,d+i);
 41             }
 42         beNextMonth(y,m,d,we);
 43     }
 44     printf("%d!/n",sum);
 45 }
 46
 47 void farm(int &yy,int &mm,int &dd) {
 48     int edy=Y+400;
 49     int edm=M;
 50     int sum=0;
 51     int y=Y,m=M,d=D,we=0;
 52     while(true) {
 53         for(int i=0; i<=20; i+=10)
 54             if((we+i)%7==0) {
 55                 sum++;
 56                 if(sum==n) {
 57                     yy=y;
 58                     mm=m;
 59                     dd=d+i;
 60                     return;
 61                 }
 62             }
 63         beNextMonth(y,m,d,we);
 64         if(y==edy && m==edm)break;
 65     }
 66     n-=sum;
 67     if(n>sum) {
 68         int t = n/sum;
 69         n-=t*sum;
 70         y+=t*400;
 71     }
 72     sum=0;
 73     while(true) {
 74         for(int i=0; i<=20; i+=10)
 75             if((we+i)%7==0) {
 76                 sum++;
 77                 if(sum==n) {
 78                     yy=y;
 79                     mm=m;
 80                     dd=d+i;
 81                     return;
 82                 }
 83             }
 84         beNextMonth(y,m,d,we);
 85         if(y==edy && m==edm)break;
 86     }
 87 }
 88
 89 int main() {
 90     int T,i,j;
 91 //    daBiao();
 92 //    return 0;
 93     scanf("%d",&T);
 94     while(T--) {
 95         scanf("%d%d%d%d",&Y,&M,&D,&n);
 96         int y,m,d;
 97         farm(y,m,d);
 98         printf("%d %d %d\n",y,m,d);
 99     }
100 }

时间: 2024-10-27 02:07:20

ZOJ3944 People Counting ZOJ3939 The Lucky Week (模拟)的相关文章

幸运序列(lucky) 模拟

[问题描述] Ly喜欢幸运数字,众所周知,幸运数字就是数字位上只有4和7的数字. 但是本题的幸运序列和幸运数字完全没关系,就是一个非常非常普通的序列.哈哈,是不是感觉被耍了,没错,你就是被耍了. Ly现在手上有一个长度为N的幸运序列a,他想这样子折腾这个序列: 如果已经折腾了k次了,就结束,否则找到一个最小的i,使得(a[i]=’4’ && a[i+1]=’7’)  //0<i<N; 找不到这样的i就结束: 如果odd(i),令a[i+1]=a[i],否则令a[i]=a[i+1

Zoj3944 - People Counting

People Counting Time Limit: 2 Seconds      Memory Limit: 65536 KB In a BG (dinner gathering) for ZJU ICPC team, the coaches wanted to count the number of people present at the BG. They did that by having the waitress take a photo for them. Everyone w

hdoj ztr loves lucky numbers 5676 (dfs模拟)

ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 918    Accepted Submission(s): 389 Problem Description ztr loves lucky numbers. Everybody knows that positive integers ar

jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)

Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些边依次加入图中,每次加入之后计算当前图的强连通分量个数并记下来,最后得到一个长度为E 的序列,这个序列就是能力的效果. 注意到,可能存在边的序列不同而能力效果相同的情况,所以羽月想请你帮她计算能发动的不同能力个数,答案对 998244353 取模.你需要对于1<=E<=V*(V-1)的所有 E 计

HDU 1264 Counting Squares(模拟)

题目链接 Problem Description Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) that specify the opposite corners of a rectangle. All coordinates will be integers in the range 0 to 100. For example, the lin

Achen毒瘤模拟题T1——数数(counting)

题目大意:给出一个区间,并给定应两两相等的数位的数对,求满足的数的个数. 范围:1e5 做法: 先用并查集,将互相相等的树连成一块,统计块的个数,从高位到低位扫描,然后容斥即可 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<queue> #inc

【PAT甲级】1049 Counting Ones (30 分)(类似数位DP思想的模拟)

题意: 输入一个正整数N(N<=2^30),输出从1到N共有多少个数字包括1. 代码: #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n; int ans=0; int l=0,r=0,low_bit=1,yushu

C language 模拟 win的经典游戏——扫雷

让我们在terminal下愉快的...扫雷 昨天跟奇葩霖聊起"雷区"这个敏感词汇,然后很荣幸的...应该轰炸不到我... 后来百无聊赖的去玩了把扫雷,然后发现我之前都是乱扫的,没有任何技巧.百科之后才发现,扫雷是有技巧的,接着玩了一把,咦挺有意思的...大概感受了一下,今天又要考数电,昨晚写了个框架,就到两点半了...睡... 今天中午回来,第一件事就是接着写...简直是爽... 这家伙,原来昨天之前...我一直不会玩...如果还是跟我一样不会玩的..我也懒得介绍规则了...自行goo

POJ 1068--Parencodings--括号逆匹配(模拟)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19655   Accepted: 11870 Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn