USER: tianbing tianbing [tbbd4261]
TASK: clocks
LANG: C++
Compiling...
Compile: OK
Executing...
Test 1: TEST OK [0.054 secs, 2932 KB]
Test 2: TEST OK [0.043 secs, 2932 KB]
Test 3: TEST OK [0.043 secs, 2932 KB]
Test 4: TEST OK [0.054 secs, 2932 KB]
Test 5: TEST OK [0.043 secs, 2932 KB]
Test 6: TEST OK [0.043 secs, 2932 KB]
Test 7: TEST OK [0.032 secs, 2932 KB]
Test 8: TEST OK [0.032 secs, 2932 KB]
Test 9: TEST OK [0.054 secs, 2932 KB]
All tests OK.
Your program ('clocks') produced all correct answers! This is your
submission #3 for this problem. Congratulations!
Here are the test data inputs:
------- test 1 -------
9 9 12
6 6 6
6 3 6
------- test 2 -------
12 9 12
9 9 9
12 9 12
------- test 3 -------
6 9 3
3 3 9
12 12 12
------- test 4 -------
9 3 9
9 9 9
9 9 9
------- test 5 -------
6 12 12
12 12 12
12 12 12
------- test 6 -------
3 12 9
6 6 6
12 12 12
------- test 7 -------
12 3 3
3 6 6
12 3 6
------- test 8 -------
12 3 9
9 12 12
3 6 9
------- test 9 -------
9 12 9
12 3 12
9 12 9
Keep up the good work!
Thanks for your submission!
题意:给你九个表的初始状态,每个表只可能是3,6,9,12,然后下面有9个操作,每个操作分把几个表的指针顺时针移动90度
要求给你一个初始状态,让你给出一种方案(移动操作的组合)使移动后所有的表的指针都指向12
提交了三次,第一次compile error 没有包含string.h,下文用到了memset,低级错误;
第二次对于test无法通过。
题解:用数组a[1……9 ]分别纪录每个表移到12需要移动的次数,接受数据时a[i]=(12-a[i])/3;即可。
9重循环暴力所有情况,用cnt[1……9]记录1……9个表的移动次数,如果可以使所有表都指向12的话就保存起来。
要注意的是:每个操作不超过四次,因为四次又回到初始的状态没有意义,表移动的次数可以超过四次,比如test 3就让A表移动了6次,而a[1]==2,也就是第i个表 移动的次数cnt[i]/4==a[i]才可,这也就是我test 3 错的原因。
最后如果有多个结果的话,是输出使所有表移动次数的和最小的那个
1 /*
2 ID:tbbd4261
3 PROG:clocks
4 LANG:C++
5 */
6
7 #include<iostream>
8 #include<fstream>
9 #include<cstring>
10 #include<vector>
11 using namespace std;
12 int a[10]; //需要移动的次数
13 int cnt[10]={0};
14 void f1(int i)
15 {
16 cnt[1]+=i; cnt[2]+=i; cnt[4]+=i; cnt[5]+=i;
17 }
18
19 void f2(int i)
20 {
21 cnt[1]+=i; cnt[2]+=i; cnt[3]+=i;
22 }
23
24 void f3(int i)
25 {
26 cnt[2]+=i; cnt[3]+=i; cnt[5]+=i; cnt[6]+=i;
27 }
28
29 void f4(int i)
30 {
31 cnt[1]+=i; cnt[4]+=i; cnt[7]+=i;
32 }
33
34 void f5(int i)
35 {
36 cnt[2]+=i; cnt[4]+=i; cnt[5]+=i; cnt[6]+=i;cnt[8]+=i;
37 }
38
39 void f6(int i)
40 {
41 cnt[3]+=i; cnt[6]+=i; cnt[9]+=i;
42 }
43
44 void f7(int i)
45 {
46 cnt[4]+=i; cnt[5]+=i; cnt[7]+=i; cnt[8]+=i;
47 }
48
49 void f8(int i)
50 {
51 cnt[7]+=i; cnt[8]+=i; cnt[9]+=i;
52 }
53
54 void f9(int i)
55 {
56 cnt[5]+=i; cnt[6]+=i; cnt[8]+=i; cnt[9]+=i;
57 }
58
59 int check()
60 {
61 bool is_ans=1;
62 for(int i=1; i<=9; i++)
63 {
64 if(cnt[i]%4!=a[i])is_ans=0;//原写成cnt[i]!=a[i],这样就没有操作的组合符合条件
65 }
66 if(is_ans)return 1;
67 else return 0;
68 }
69 vector<vector< int > >vec;
70
71 void push(int i1,int i2,int i3,int i4,int i5,int i6,int i7,int i8,int i9,int &min)
72 {
73 vector<int>tem;
74 for(int i=1;i<=i1&&i1!=0;i++)tem.push_back(1);
75 for(int i=1;i<=i2&&i2!=0;i++)tem.push_back(2);
76 for(int i=1;i<=i3&&i3!=0;i++)tem.push_back(3);
77 for(int i=1;i<=i4&&i4!=0;i++)tem.push_back(4);
78 for(int i=1;i<=i5&&i5!=0;i++)tem.push_back(5);
79 for(int i=1;i<=i6&&i6!=0;i++)tem.push_back(6);
80 for(int i=1;i<=i7&&i7!=0;i++)tem.push_back(7);
81 for(int i=1;i<=i8&&i8!=0;i++)tem.push_back(8);
82 for(int i=1;i<=i9&&i9!=0;i++)tem.push_back(9);
83 vec.push_back(tem);
84 //int sum=tem.size();
85 //if(sum<min){ min=sum; vec.clear(); vec.push_back(tem); }
86 //else if(sum==min)vec.push_back(tem);
87 }
88
89 int main()
90 {
91 ifstream cin("clocks.in");
92 ofstream cout("clocks.out");
93 int min=10000;
94 for(int i=1; i<=9; i++)
95 { cin>>a[i]; a[i]=(12-a[i])/3; }
96 for(int i1=0; i1<4; i1++)
97 for(int i2=0; i2<4; i2++)
98 for(int i3=0; i3<4; i3++)
99 for(int i4=0; i4<4; i4++)
100 for(int i5=0; i5<4; i5++)
101 for(int i6=0; i6<4; i6++)
102 for(int i7=0; i7<4; i7++)
103 for(int i8=0; i8<4; i8++)
104 for(int i9=0; i9<4; i9++)
105 {
106 f1(i1); f2(i2); f3(i3); f4(i4); f5(i5); f6(i6); f7(i7); f8(i8); f9(i9);
107 int v=check();
108 if(v==1)
109 push(i1,i2,i3,i4,i5,i6,i7,i8,i9,min);
110 memset(cnt,0,sizeof cnt);
111 }
112
113 int mov[10]={0,4,3,4,3,5,3,4,3,4};
114 vector<int> temp; int m=10000;
115
116 for(int i=0; i<vec.size(); i++)
117 {
118 int sum=0;
119 for(int j=0; j<vec[i].size();j++)
120 sum+=mov[vec[i][j]];
121 if(sum<m)
122 { m=sum; temp=vec[i]; }
123 }
124 cout<<temp[0];
125 for(int i=1; i<temp.size(); i++)
126 cout<<' '<<temp[i];
127 cout<<endl;
128
129 //system("pause");
130 return 0;
131 }
132