您的位置:首页 > 编程语言

【poj3349】SnowFlake snow SnowFlake 解题报告+代码

2012-03-02 16:07 281 查看
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
////#define INPUT
////#define DBG
/**
Begin Time:5:00 p.m. 1st/3/2012
End Time: 8:02 p.m.  1st/3/2012
Cost Time: 3Hours 2Mins
测试数据:
没有……
思路:
首先读入6个数,要给这6个数排序,然后存在
nodes[i].val里面。
最后给nodes这个数组排序。
从0 -> n-1开始寻找,
compare(nodes[i],nodes[i+1]);
如果相同的话,就说明存在相同的雪花。
以上。
*/
using namespace std;
const int c0de4fun = 10000010;
int buf[6];
struct node
{
int val[6];
};
node nodes[c0de4fun];
int isNotBigger(node a,node b)
{
int i = 0;
while( a.val[i] == b.val[i] && i < 6)
i++;
if ( i == 6) //equal
return 0;
if ( a.val[i] > b.val[i] )
return 1;
if ( a.val[i] < b.val[i] )
return -1;
}
int partition(int begin,int end)
{
node x; node tmp;
x = nodes[end];
int k = begin - 1;
for(int m = begin; m <= end  - 1; m++)
{
if ( isNotBigger(x,nodes[m]) != 1 )
{
k++;
//exchange(nodes[k],nodes[m]);
tmp = nodes[k];
nodes[k] = nodes[m];
nodes[m] = tmp;
}
}
//exchange(nodes[end],nodes[k+1]);
tmp = nodes[end];
nodes[end] = nodes[k+1];
nodes[k+1] = tmp;
return k+1;
}
void sortEle(int begin,int end)
{
int q = 0;
if ( begin < end )
{
q = partition(begin,end);
sortEle(begin,q - 1);
sortEle(q + 1,end);
}
}
void selectSort(int* a,int end)
{
int tmp = 0;
int i;
for(int j = 1 ; j < end; j++)
{
tmp = a[j];
i = j - 1;
while( i >= 0 && a[i] > tmp )
{
a[i+1] = a[i];
i--;
}
a[i+1] = tmp;
}
}
int main()
{
#ifdef INPUT
freopen("b:\\acm\\poj3349\\input.txt","r",stdin);
#endif
int n,i;
bool found = false;
scanf("%d",&n);
for( i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < 6; j++)
scanf("%d",&buf[j]);
selectSort(buf,6);
memcpy(nodes[i].val,buf,sizeof(int)*6);
}
sortEle(0,i);
for(int j = 0 ; j < i-1; j++)
{
if(isNotBigger(nodes[j],nodes[j+1]) == 0)
{
found = true;
break;
}
}
if( found )
{
printf("Twin snowflakes found.\n");
}
else
{
printf("No two snowflakes are alike.\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: