XTUJ 1173 Five Tiger (시 뮬 레이 션)

6522 단어 알고리즘ACM

Five Tiger
Accepted : 34
 
Submit : 107
Time Limit : 1000 MS
 
Memory Limit : 65536 KB
제목 에 따 르 면 오호 기 는 동북 민간 에 전해 지 는 놀이 로 GG 는 어 렸 을 때 사촌 형 에 게 비참 하 게 학대 당 했다.각 지역 의 규칙 이 다 를 수 있 고 GG 의 추억 이 정확 하지 않 을 수 있 으 므 로 규칙 이 평소에 하 는 것 과 충돌 이 있 으 면 이곳 을 위주 로 하 세 요.바둑판 은 가로 다섯 개, 세로 다섯 개의 직선 으로 25 개의 교차점 을 형성 하고 쌍방 은 돌아 가면 서 바둑판 을 교차점 에 놓는다 (필요 한 각자 와 바둑판 의 수가 많 지 않 기 때문에 12 + 13 밖 에 되 지 않 았 다. GG 가 어 렸 을 때 장기 의 바둑판 과 바둑 알 을 사용 했다. 정말 큰 바둑판 으로 시원 하 다 ~ ~) 쌍방 이 바둑판 을 가득 채운 후에 (먼저 13 개의 바둑 알 을 두 었 고 나중에 12 개의 바둑 알 을 두 었 다)쌍방 이 배열 한 진형 에 근거 하여 점 수 를 계산 하 다.(물론 점 수 를 계산 한 후에 상대방 의 해당 개 수 를 말 한 다음 에 바둑 알 을 한 칸 한 칸 씩 옮 겨 서 진형 을 계속 형성 하고 상대방 의 바둑 알 신 호 를 말 한 후에 GG 의 표현 이 명확 하지 않 으 면 더 이상 후속 문제 에서 문 제 를 내지 않 는 다) 지금 GG 는 당신 에 게 계산 을 도와 달라 고 하고 싶 습 니 다. 쌍방 이 배열 한 진형 은 각각 얼마나 득점 합 니까?그 중에서 점 수 를 기록 하 는 진형 은 (o 로 바둑돌 의 타 점 을 표시) 대오 호 (10 점) 가 네 구석 과 가장 중간 에 있 는 위치
o...o
.....
..o..
.....
o...o
오호 (5 점) 를 차지 하 라 고 요구 했다. 아래 그림 과 같은 진형
o.o
.o.
o.o
은 하늘 로 통한다 (5 점): 가로 / 세로 / 세로 다섯 개의 바둑돌 을 한 직선 으로 연결 했다. 예 를 들 어
.....	..o..	o....
ooooo	..o..	.o...
.....	..o..	..o..
.....	..o..	...o.
.....	..o..	....o
4 경사 (4 점): 엄 격 히 정의 하면 GG 는 잘 모 르 겠 지만 한 마디 로 다음 과 같은 네 가지
...o.	.....	.....	.o...
..o..	o....	....o	..o..
.o...	.o...	...o.	...o.
o....	..o..	..o..	....o
.....	...o.	.o...	.....
만 있다.삼 사 (3 점): 엄 격 히 정의 하면 GG 는 잘 모 르 겠 습 니 다. 한 마디 로 다음 과 같은 네 가지
..o..	.....	.....	..o..
.o...	.....	.....	...o.
o....	o....	....o	....o
.....	.o...	...o.	.....
.....	..o..	..o..	.....
작은 두 (1 점) 만 있 습 니 다. 네 개의 바둑 알 이 하나의 최소 정사각형
oo
oo
예 1
o...o
.o.o.
..o..
.oooo
o..oo
o 이 유 저 는 큰 오호 (10 점) 1 개, 작은 오호 (5 점) 1 개, 통 천 (10 점) 2 개, 작은 두 (1 점) 1 개 를 형 성 했 습 니 다. 총 점: 10 + 5 + 10 * 2 + 1 = 36 예 2
.o.o.
o.o.o
.o.o.
o.o.o
.o.o.
o 이 유 저 는 4 개의 작은 오호, 4 개의 경사 총 점 5 * 4 + 4 * 4 = 36 여러 조 의 테스트 데 이 터 를 입력 하 였 습 니 다.먼저 하나의 정수 T (1 ≤ T ≤ 10000) 로 한 줄 을 차지 하고 테스트 데 이 터 를 나타 내 는 그룹 수 입 니 다. 각 조 의 테스트 데이터 에 대해 6 줄 을 차지 합 니 다.우선 공 행 다음 5 행 은 하나의 정 세 를 나타 낸다.즉, 줄 당 5 글자 (x 는 선 수 를 나타 내 고 o 는 후 수 를 나타 낸다. 즉, 13 개의 x 와 12 개의 o) 가 각 조 의 테스트 데이터 에 대해 한 줄 을 출력 한다. 결 과 는 두 개의 정수 이 고 사 이 를 하나의 빈 칸 으로 나 누 어 각각 선수 (x) 의 득점 과 후수 (o) 의 득점 을 나타 낸다.샘플 입력
2

oxxxo
xoxox
xxoxx
xoooo
oxxoo

xoxox
oxoxo
xoxox
oxoxo
xoxox
샘플 출력
9 26
57 36

Source XTU Online Judge    오늘 ac 의 두 번 째 문제 이자 시 뮬 레이 션 문제 입 니 다. 생각 이 복잡 하지 않 습 니 다. 제목 의 뜻 에 따라 함 수 를 하나씩 쓰 면 됩 니 다. 주로 입 출력 할 때 아버지 가 약간 구 겨 집 니 다.생각 대로 썼 는 지 단번에 썼 는 지 오늘 이 바로 이 문 제 를 오랫동안 풀 었 는데 다행히 결국은 ac 였 다. 다음은 ac 의 코드:
#include <stdio.h>
#include <iostream>
using namespace std;
char Matrix[5][5];
using namespace std;
int big_tiger(char ch)//       10 
{
    if(Matrix[0][0]==ch && Matrix[0][4]==ch && Matrix[2][2]==ch && Matrix[4][0]==ch && Matrix[4][4]==ch)
        return 10;
    else
        return 0;
}
int small_tiger(char ch)//       5 
{
    int total = 0;
    int i=1,j=1;
    for(i=1; i<4; i++)
        for(j=1; j<4; j++)
        {
            if(Matrix[i][j]==ch && Matrix[i-1][j-1]==ch && Matrix[i+1][j+1]==ch && Matrix[i-1][j+1]==ch && Matrix[i+1][j-1]==ch)
               total += 5;
        }
    return total;
}
int sky(char ch)//      5 
{
    int total = 0;
    int i;
    for(i=0; i<5; i++)
    {
        if(Matrix[i][0]==ch && Matrix[i][1]==ch && Matrix[i][2]==ch && Matrix[i][3]==ch && Matrix[i][4]==ch)
            total += 5;
        if(Matrix[0][i]==ch && Matrix[1][i]==ch && Matrix[2][i]==ch && Matrix[3][i]==ch && Matrix[4][i]==ch)
           total += 5;
    }
    if(Matrix[0][0]==ch && Matrix[1][1]==ch && Matrix[2][2]==ch && Matrix[3][3]==ch && Matrix[4][4]==ch)
      total+=5;
    if(Matrix[0][4]==ch && Matrix[1][3]==ch && Matrix[2][2]==ch && Matrix[3][1]==ch && Matrix[4][0]==ch)
      total+=5;
    return total;
}
int four(char ch)//      4 
{
    int total=0;
    if(Matrix[0][3]==ch && Matrix[1][2]==ch && Matrix[2][1]==ch && Matrix[3][0]==ch)
        total += 4;
    if(Matrix[1][0]==ch && Matrix[2][1]==ch && Matrix[3][2]==ch && Matrix[4][3]==ch)
        total += 4;
    if(Matrix[1][4]==ch && Matrix[2][3]==ch && Matrix[3][2]==ch && Matrix[4][1]==ch)
        total += 4;
    if(Matrix[0][1]==ch && Matrix[1][2]==ch && Matrix[2][3]==ch && Matrix[3][4]==ch)
        total += 4;

        return total;
}
int three(char ch)//       3 
{
    int total=0;
    if(Matrix[0][2]==ch && Matrix[1][1]==ch && Matrix[2][0]==ch)
        total += 3;
    if(Matrix[2][0]==ch && Matrix[3][1]==ch && Matrix[4][2]==ch)
        total += 3;
    if(Matrix[2][4]==ch && Matrix[3][3]==ch && Matrix[4][2]==ch)
        total += 3;
    if(Matrix[0][2]==ch && Matrix[1][3]==ch && Matrix[2][4]==ch)
        total += 3;

    return total;
}
int small_dou(char ch)//       1 
{
    int total = 0;
    int i,j;
    for(i=0; i<4; i++)
        for(j=0; j<4; j++)
            if(Matrix[i][j]==ch && Matrix[i+1][j]==ch && Matrix[i][j+1]==ch && Matrix[i+1][j+1]==ch)
            {
                total++;
            }

    return total;

}
int main()
{
    int t,frist,last ,i,j;
    scanf("%d",&t);
    getchar();//             ;
    //cin>>t;//           c         ,   cin     ,           ,       !!
    while(t--)
    {
        getchar();//        
        for(i=0;i<5;i++)
            {
               for(j=0;j<5;j++)
               scanf("%c",&Matrix[i][j]);
               getchar();//        
               //cin>>Matrix[i][j];
            }
         frist=last=0;
         frist=big_tiger('x')+small_tiger('x')+sky('x')+four('x')+three('x')+small_dou('x');
         last=big_tiger('o')+small_tiger('o')+sky('o')+four('o')+three('o')+small_dou('o');
         printf("%d %d
",frist,last); } return 0; }
ac 몇 개의 간단 한 문제 만 풀 었 습 니 다. 인터넷 에 있 는 대 신 이 자신의 경험 을 말 할 때 거의 7.8 백 문 제 를 풀 었 습 니 다. 무 겁 고 갈 길이 멀 군요!!

좋은 웹페이지 즐겨찾기