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

hdu1573 X問題

編輯:C++入門知識

原題:

http://acm.hdu.edu.cn/showproblem.php?pid=1573


這個題目真是坑爹啊- =首先說M個正整數,結果測試數據裡面就有0 - =莫非0成了正整數?
擴展中國剩余定理解這道題目很多模板也不對- =造呢。。也不知道到底可不可以從0開始- =坑爹的題目。。

如果時間急別在這裡干著急了- =坑死人

#include 
#include 
#include 
using namespace std;
#define lln long long int

lln a[11];
lln b[11];

lln gcd( lln a, lln b)
{
	return b == 0 ? a : gcd(b, a % b);
}

void ace()
{
	int n, m;
	int t;
	int i, j;
	int lcm;
	bool flag;
	int num;
	cin >> t;
	while (t--)
	{
		memset(a, 0, sizeof(a));
		memset(b, 0, sizeof(b));
		cin >> n >> m;
		lcm = 1;
		flag = false;
		num = 0;
		for (i = 0; i < m; i++)
		{
			cin >> a[i];
			lcm = lcm * a[i] / gcd(lcm, a[i]);
		}
		for (i = 0; i < m; i++)
			cin >> b[i];
		for (i = 1; i <= lcm && i <= n; i++) //find the minium num 坑爹的地方- - i不能從0開始
		{
			for (j = 0; j < m; j++)
				if (i % a[j] != b[j])
					break;
			if (j == m)
			{
				flag = true;
				break;
			}
		}
		if (flag)
		{
			int temp = n % lcm;
			if (temp >= i)
				i = n / lcm + 1;
			else
				i = n / lcm;
			printf("%d\n", i);
//			while (i <= n)
//			{
//				i += lcm;
//				num++;
//			}
//			cout << num << endl;
		}
		else
			printf("0\n");
	}
}
int main()
{
	ace();
	return 0;
}


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