【USACO3.2.3】纺车的轮子 模拟

51 篇文章 0 订阅

按照题目意思模拟……


而且因为旋转360度一定会重复,所以只要模拟旋转360次,每次CHECK一下是否符合要求即可。



Executing...
   Test 1: TEST OK [0.003 secs, 3364 KB]
   Test 2: TEST OK [0.005 secs, 3364 KB]
   Test 3: TEST OK [0.005 secs, 3364 KB]
   Test 4: TEST OK [0.005 secs, 3364 KB]
   Test 5: TEST OK [0.003 secs, 3364 KB]
   Test 6: TEST OK [0.005 secs, 3364 KB]
   Test 7: TEST OK [0.003 secs, 3364 KB]
   Test 8: TEST OK [0.005 secs, 3364 KB]

All tests OK.

/*
TASK:spin
LANG:C++
*/
#include <iostream>
#include <cstdio>
using namespace std;

int v[5];
bool aaa[5][360]={0}, bbb[5][360];
bool (*x)[360] = aaa, (*y)[360] = bbb;

inline bool check()
{
	for (int i = 0; i != 360; ++ i)
	{
		int flag = 0;	
		for (int j = 0; j != 5; ++ j)	flag += x[j][i];
		if (flag == 5)	return true;
	}
	return false;
}

int main()
{
	freopen("spin.in","r",stdin);
	freopen("spin.out","w",stdout);
	for (int i = 0; i != 5; ++ i)
	{
		cin >> v[i];	
		int t;
		cin >> t;
		while (t--)
		{
			int st, len;
			cin >> st >> len;
			for (int j = 0; j <= len; ++ j)	x[i][(j + st)%360] = 1;
		}
	}
	int flag = -1;
	for (int t = 0; t != 360; ++ t)
	{
		if (check())
		{
			flag = t;
			break;	
		}	
		for (int i = 0; i != 360; ++ i)
			for (int j = 0; j != 5; ++ j)
			{

				int tmp = i - v[j];
				tmp < 0 ? tmp += 360 : tmp;
				y[j][i] = x[j][tmp];	
			}
		swap(x, y);
	}
	if (flag != -1)	cout<< flag << endl;
	else cout<< "none" << endl;
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值