您的位置:首页 > 运维架构

ZOJ3944 People Counting ZOJ3939 The Lucky Week (模拟)

2016-05-12 11:46 531 查看
ZOJ3944 People Counting

ZOJ3939 The Lucky Week

1.PeopleConting

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

.O.
/|\
(.)

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

题解:

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

代码:

#include<iostream>
#include<cstdio>
#include<cstring>

const int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

int Y,M,D,n;

inline bool isRun(const int &year) {
return (year%4==0 && year%100!=0) || (year%400==0);
}

int getDays(int year,int month) {
if(month!=2)return md[month-1];
if(isRun(year))return 29;
else return 28;
}

void beNextMonth(int &y,int &m,int &d,int &we) {
int days = getDays(y,m);
int cha = days + 1 - d;
m++;
if(m>12) {
y++;
m=1;
}
d=1;
we = (we+cha)%7;
}

int daBiao() {
int y=2016, m=4, d=11;
int we=0;
int edy=2417,edm=1;
int sum=0;
while(!(y==edy && m==edm)) {
for(int i=0; i<=20; i+=10)
if((we+i)%7==0) {
if(y>=2017)sum++;
//                if(y==2016 || y==2416)printf("%d-%d-%d\n",y,m,d+i);
}
beNextMonth(y,m,d,we);
}
printf("%d!/n",sum);
}

void farm(int &yy,int &mm,int &dd) {
int edy=Y+400;
int edm=M;
int sum=0;
int y=Y,m=M,d=D,we=0;
while(true) {
for(int i=0; i<=20; i+=10)
if((we+i)%7==0) {
sum++;
if(sum==n) {
yy=y;
mm=m;
dd=d+i;
return;
}
}
beNextMonth(y,m,d,we);
if(y==edy && m==edm)break;
}
n-=sum;
if(n>sum) {
int t = n/sum;
n-=t*sum;
y+=t*400;
}
sum=0;
while(true) {
for(int i=0; i<=20; i+=10)
if((we+i)%7==0) {
sum++;
if(sum==n) {
yy=y;
mm=m;
dd=d+i;
return;
}
}
beNextMonth(y,m,d,we);
if(y==edy && m==edm)break;
}
}

int main() {
int T,i,j;
//    daBiao();
//    return 0;
scanf("%d",&T);
while(T--) {
scanf("%d%d%d%d",&Y,&M,&D,&n);
int y,m,d;
farm(y,m,d);
printf("%d %d %d\n",y,m,d);
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: