您的位置:首页 > 其它

[ZOJ 3839] Poker Face (递归)

2014-12-01 21:30 411 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3839

题目大意:画脸。。每张脸是上一个脸倒过来加上眼睛。。

注意n<8时停止,被这个坑惨了- -以为是0停止。。

递归,然后去推坐标公式。。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> vec;
typedef vector<vec> mat;
#define AA first
#define BB second

char s[2000][2000];

void solve(int x,int y,int si,bool seq){
//    printf("[solve]:x=%d,y=%d,si=%d\n",x,y,si);
if( si==8 ){
//        return;
if( seq ){
for(int i=x;i<x+si;i++){
if( i==x||i==x+si-1){
for(int j=y;j<y+si;j++){
s[i][j] = '*';
}
} else {
for(int j=y;j<y+si;j++){
if( (i>=x+1&&i<=x+3)&&(j<=y+2||(j>=y+5&&j<=y+7)) ) s[i][j] = '*';
else if( i==x+4&&(j==y||(j>=y+2&&j<=y+5)||j==y+7) ) s[i][j] = '*';
else if( (i==x+5||i==x+6)&&(j==y||j==y+7||j==y+2||j==y+5) ) s[i][j] = '*';
else s[i][j] = ' ';
}
}
}
} else {
for(int i=x;i>x-si;i--){
if( i==x||i==x-si+1 ){
for(int j=y;j>y-si;j--){
s[i][j] = '*';
}
} else {
for(int j=y;j>y-si;j--){
if( (i<=x-1&&i>=x-3)&&(j>=y-2||(j<=y-5&&j>=y-7)) ) s[i][j] = '*';
else if( i==x-4&&(j==y||(j<=y-2&&j>=y-5)||j==y-7) ) s[i][j] = '*';
else if( (i==x-5||i==x-6)&&(j==y||j==y-7||j==y-2||j==y-5) ) s[i][j] = '*';
else s[i][j] = ' ';
}
}
}
}
return;
}
if( seq ){
for(int i=x;i<x+si;i++ ){
if( i==x||i==x+si-1 ){
for(int j=y;j<y+si;j++){
s[i][j] = '*';
}
} else {
for(int j=y;j<y+si;j++){
if( j==y||j==y+si-1 ) s[i][j] = '*';
else if( (i==x+si/8||i==x+si/8+si/4)&&((j>=y+si/8&&j<=y+si/8+si/4-1)||(j<=y+si-si/8-1&&j>=y+si-si/8-si/4)) ) {
s[i][j] = '*';
}
else if( (i>x+si/8&&i<x+si/8+si/4)&&(j==y+si/8||j==y+si/8+si/4-1||j==y+si-si/8-1||j==y+si-si/8-si/4) ) s[i][j] = '*';
else s[i][j] = ' ';
}
}
}
solve(x+si-1,y+si-si/4-1,si/2,!seq);
} else {
for(int i=x;i>x-si;i-- ){
if( i==x||i==x-si+1 ){
for(int j=y;j>y-si;j--){
s[i][j] = '*';
}
} else {
for(int j=y;j>y-si;j--){
if( j==y||j==y-si+1 ) s[i][j] = '*';
else if( (i==x-si/8||i==x-si/8-si/4)&&((j<=y-si/8&&j>=y-si/8-si/4+1)||(j>=y-si+si/8+1&&j<=y-si+si/8+si/4)) ) {
s[i][j] = '*';
}
else if( (i<x-si/8&&i>x-si/8-si/4)&&(j==y-si/8||j==y-si/8-si/4+1||j==y-si+si/8+1||j==y-si+si/8+si/4) ) s[i][j] = '*';
else s[i][j] = ' ';
}
}
}
solve(x-si+1,y-si+si/4+1,si/2,!seq);
}
}

int n;

int main(){
while( ~scanf("%d",&n) ){
if(n < 8)break;
solve(0,0,n,true);
for(int i=0;i<n;i++){
s[i]
= '\0';
//for(int j=0;j<n;j++){
printf("%s\n",s[i]);
//  }
// puts("");
}
puts("");
}
//    solve(31,31,32,false);

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