程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> USACO The Clocks

USACO The Clocks

編輯:C++入門知識

操作間沒有次序關系,同一個操作最多重復3次。。。

可以直接暴力。。。

The Clocks
IOI'94 - Day 2
Consider nine clocks arranged in a 3x3 array thusly:
|-------|    |-------|    |-------|    
|       |    |       |    |   |   |    
|---O   |    |---O   |    |   O   |          
|       |    |       |    |       |           
|-------|    |-------|    |-------|    
    A            B            C

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O   |    |   O   |
|   |   |    |   |   |    |   |   |
|-------|    |-------|    |-------|
    D            E            F

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O---|    |   O   |
|   |   |    |       |    |   |   |
|-------|    |-------|    |-------|
    G            H            I

The goal is to find a minimal sequence of moves to return all the dials to 12 o'clock. Nine different ways to turn the dials on the clocks are supplied via a table below; each way is called a move. Select for each move a number 1 through 9 which will cause the dials of the affected clocks (see next table) to be turned 90 degrees clockwise.

Move Affected clocks 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI

Example

Each number represents a time according to following table:
9 9 12       9 12 12       9 12 12        12 12 12      12 12 12 
6 6 6  5 ->  9  9  9  8->  9  9  9  4 ->  12  9  9  9-> 12 12 12 
6 3 6        6  6  6       9  9  9        12  9  9      12 12 12 

[But this might or might not be the `correct' answer; see below.]

PROGRAM NAME: clocks

INPUT FORMAT

Lines 1-3: Three lines of three space-separated numbers; each number represents the start time of one clock, 3, 6, 9, or 12. The ordering of the numbers corresponds to the first example above.

SAMPLE INPUT (file clocks.in)

9 9 12
6 6 6
6 3 6

OUTPUT FORMAT

A single line that contains a space separated list of the shortest sequence of moves (designated by numbers) which returns all the clocks to 12:00. If there is more than one solution, print the one which gives the lowest number when the moves are concatenated (e.g., 5 2 4 6 < 9 3 1 1).

SAMPLE OUTPUT (file clocks.out)

4 5 8 9


USACO Gateway | Comment or Question


/*
    ID:qhn9992
    PROG:clocks
    LANG:C++11
*/
#include 
#include 
#include 
#include 

using namespace std;

int a[10],c[10];
int b[10][10]
={  0,0,0,0,0,0,0,0,0,0,
    1,1,0,1,1,0,0,0,0,0,
    1,1,1,0,0,0,0,0,0,0,
    0,1,1,0,1,1,0,0,0,0,
    1,0,0,1,0,0,1,0,0,0,
    0,1,0,1,1,1,0,1,0,0,
    0,0,1,0,0,1,0,0,1,0,
    0,0,0,1,1,0,1,1,0,0,
    0,0,0,0,0,0,1,1,1,0,
    0,0,0,0,1,1,0,1,1,0
};

int main()
{
    freopen("clocks.in","r",stdin);
    freopen("clocks.out","w",stdout);
	int cnt=0;

	for(int i=1;i<=9;i++)
	{
		scanf("%d",a+i);
		a[i]=(a[i]/3)%4;
	}
	for(c[1]=0;c[1]<4;c[1]++)
	{
		for(c[2]=0;c[2]<4;c[2]++)
		{
			for(c[3]=0;c[3]<4;c[3]++)
			{
				for(c[4]=0;c[4]<4;c[4]++)
				{
					for(c[5]=0;c[5]<4;c[5]++)
					{
						for(c[6]=0;c[6]<4;c[6]++)
						{
							for(c[7]=0;c[7]<4;c[7]++)
							{
								for(c[8]=0;c[8]<4;c[8]++)
								{
									for(c[9]=0;c[9]<4;c[9]++)
									{
										///check....
										bool flag=true;
										for(int i=1;i<=9;i++)
										{
											int t=a[i];
											for(int j=1;j<=9;j++)
											{
												t+=b[j][i-1]*c[j];
											}
											t=t%4;
											if(t)
											{
												flag=false;
												break;
											}
										}
										if(flag)
										{
											for(int i=1;i<=9;i++)
											{
												while(c[i]--)
												{
													if(flag)
													{
														flag=false;
													}
													else putchar(32);
													printf("%d",i);
												}
											}
											putchar(10);
											return 0;
										}
										else continue;
									}
								}
							}
						}
					}
				}
			}
		}
	}
    return 0;
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved