USACO 1.4.2 The Clocks
2013-07-27 13:53
330 查看
原题链接:http://cerberus.delos.com:791/usacoprob2?a=s1DTJaMre3q&S=clocks
先来说一下题目的意思吧!
有九个钟表,标号为A,B,C,D,E,F,G,H,I,然后题目给出九种旋转钟表的方案。比如说1 ABDE是说第一种方案为顺时针旋转A,B,D,E钟表90度,剩下的八种方案意思也是一样的。
题目会给出钟表的初始状态,然后要求你从这九种方案中选出几种方案,然后组合在一起,使得最后旋转的结果为每个钟表都指向12。输出最小的操作顺序。
分析与思路:
每种方案有四种可能,即被使用0次,1次,2次,3次(因为使用第四次的时候就已经转回原来的样子了),而九个种就形成了4^9=262144种可能,枚举这262144种可能,找出最小的就好了。就是九个for循环来遍历,但是这样可能会超时,所以就得在最内层for循环中进行处理。一种高效的方法是用两个for循环来过滤掉不合格的,第一层for循环代表每一个钟表,内层的for循环代表组合方案的每一种方案,如果一旦组合方案操作在第一个钟表后不能使第一个钟表指向12,则直接否定这种方案,后面几个钟表就不需要在进行这个组合方案了。另外,按这种方法找到的第一种必定是最小的,所以是不需要比较的,找到满足要求的组合方案后直接return就可以了。
源代码:/*
ID: supersnow0622
PROG: clocks
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int data[9];
int clocks[9];
int method[10][10]={{0},
{0,3,3,0,3,3,0,0,0,0},
{0,3,3,3,0,0,0,0,0,0},
{0,0,3,3,0,3,3,0,0,0},
{0,3,0,0,3,0,0,3,0,0},
{0,0,3,0,3,3,3,0,3,0},
{0,0,0,3,0,0,3,0,0,3},
{0,0,0,0,3,3,0,3,3,0},
{0,0,0,0,0,0,0,3,3,3},
{0,0,0,0,0,3,3,0,3,3}};
int count[10];
int main() {
ofstream fout ("clocks.out");
ifstream fin ("clocks.in");
string str;
for(int i=1;i<=9;i++){
cin>>clocks[i];
if(clocks[i]==12)
clocks[i]=0;
}
for(count[1]=0;count[1]<4;count[1]++)
for(count[2]=0;count[2]<4;count[2]++)
for(count[3]=0;count[3]<4;count[3]++)
for(count[4]=0;count[4]<4;count[4]++)
for(count[5]=0;count[5]<4;count[5]++)
for(count[6]=0;count[6]<4;count[6]++)
for(count[7]=0;count[7]<4;count[7]++)
for(count[8]=0;count[8]<4;count[8]++)
for(count[9]=0;count[9]<4;count[9]++)
{
str="";
for(int i=1;i<=9;i++)
data[i]=clocks[i];
int judge=true;
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
data[i]+=method[j][i]*count[j];
data[i]%=12;
}
if(data[i]!=0)
{
judge=false;break;
}
}
if(judge)
{
for(int i=1;i<=9;i++)
for(int j=0;j<count[i];j++)
str+=i+'0';
for(int i=0;i<str.length()-1;i++)
cout<<str[i]<<" ";
cout<<str[str.length()-1]<<endl;
return 0;
}
}
}
先来说一下题目的意思吧!
有九个钟表,标号为A,B,C,D,E,F,G,H,I,然后题目给出九种旋转钟表的方案。比如说1 ABDE是说第一种方案为顺时针旋转A,B,D,E钟表90度,剩下的八种方案意思也是一样的。
题目会给出钟表的初始状态,然后要求你从这九种方案中选出几种方案,然后组合在一起,使得最后旋转的结果为每个钟表都指向12。输出最小的操作顺序。
分析与思路:
每种方案有四种可能,即被使用0次,1次,2次,3次(因为使用第四次的时候就已经转回原来的样子了),而九个种就形成了4^9=262144种可能,枚举这262144种可能,找出最小的就好了。就是九个for循环来遍历,但是这样可能会超时,所以就得在最内层for循环中进行处理。一种高效的方法是用两个for循环来过滤掉不合格的,第一层for循环代表每一个钟表,内层的for循环代表组合方案的每一种方案,如果一旦组合方案操作在第一个钟表后不能使第一个钟表指向12,则直接否定这种方案,后面几个钟表就不需要在进行这个组合方案了。另外,按这种方法找到的第一种必定是最小的,所以是不需要比较的,找到满足要求的组合方案后直接return就可以了。
源代码:/*
ID: supersnow0622
PROG: clocks
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int data[9];
int clocks[9];
int method[10][10]={{0},
{0,3,3,0,3,3,0,0,0,0},
{0,3,3,3,0,0,0,0,0,0},
{0,0,3,3,0,3,3,0,0,0},
{0,3,0,0,3,0,0,3,0,0},
{0,0,3,0,3,3,3,0,3,0},
{0,0,0,3,0,0,3,0,0,3},
{0,0,0,0,3,3,0,3,3,0},
{0,0,0,0,0,0,0,3,3,3},
{0,0,0,0,0,3,3,0,3,3}};
int count[10];
int main() {
ofstream fout ("clocks.out");
ifstream fin ("clocks.in");
string str;
for(int i=1;i<=9;i++){
cin>>clocks[i];
if(clocks[i]==12)
clocks[i]=0;
}
for(count[1]=0;count[1]<4;count[1]++)
for(count[2]=0;count[2]<4;count[2]++)
for(count[3]=0;count[3]<4;count[3]++)
for(count[4]=0;count[4]<4;count[4]++)
for(count[5]=0;count[5]<4;count[5]++)
for(count[6]=0;count[6]<4;count[6]++)
for(count[7]=0;count[7]<4;count[7]++)
for(count[8]=0;count[8]<4;count[8]++)
for(count[9]=0;count[9]<4;count[9]++)
{
str="";
for(int i=1;i<=9;i++)
data[i]=clocks[i];
int judge=true;
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
data[i]+=method[j][i]*count[j];
data[i]%=12;
}
if(data[i]!=0)
{
judge=false;break;
}
}
if(judge)
{
for(int i=1;i<=9;i++)
for(int j=0;j<count[i];j++)
str+=i+'0';
for(int i=0;i<str.length()-1;i++)
cout<<str[i]<<" ";
cout<<str[str.length()-1]<<endl;
return 0;
}
}
}
相关文章推荐
- USACO:1.4.2 The Clocks 时钟(IOI 94) 解析
- USACO section 1.4.2 The Clocks
- 1250. 【USACO题库】1.4.2 The Clocks (Standard IO)
- USACO section 1.4.2 The Clocks
- [USACO 1.4.2] The Clocks
- 【USACO题库】1.4.2 The Clocks
- USACO1.4.2(The clocks)BFS
- USACO 1.4.2 The Clocks(DFS)
- Usaco 1.4.2 时钟(The Clocks)
- JZOJ1250.【USACO题库】1.4.2 The Clocks
- USACO1.4.2--The Clocks
- usaco1.4.2 Mother's Milk
- the clocks(usaco)
- USACO6.5.4 The Clocks(clocks)
- USACO 1.4.2 BFS 解法。
- USACO 1.4.2 Mother's Milk
- USACO 1.41 The clocks
- 【宽搜】The Clocks 时钟 (Usaco_Training 1.4)
- USACO:The Clocks
- USACO 1.4-The Clocks