http://www.codeforces.com/contest/477/problem/C
题目大意:给你n个集合,每个集合里面有四个数字,他们的gcd是k,输出符合条件的集合中m,m为集合中最大的数,且保证m要尽量小。
思路:由找规律可以得到集合的关系为1+6*k 2+6*k 3+6*k 5+6*k。
不过我的写法不是这样。。。(道理还是一样的)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //看看会不会爆int!数组会不会少了一维! 2 //取物问题一定要小心先手胜利的条件 3 #include <bits/stdc++.h> 4 using namespace std; 5 #define LL long long 6 #define ALL(a) a.begin(), a.end() 7 #define pb push_back 8 #define mk make_pair 9 #define fi first 10 #define se second 11 const int maxn = 10000 + 5; 12 bool vis[maxn]; 13 int cnt, n, k, m; 14 int a[5]; 15 vector<int> v; 16 17 int main(){ 18 scanf("%d%d", &n, &k); 19 int tmp = 0; 20 for (int i = 1; i <= n; i++){ 21 int t1 = tmp + k, t2 = tmp + 2 * k, t3 = tmp + 3 * k, t4 = tmp + 5 * k; 22 tmp = t4 + k; 23 } 24 printf("%d ", tmp - k); 25 tmp = 0; 26 for (int i = 1; i <= n; i++){ 27 int t1 = tmp + k, t2 = tmp + 2 * k, t3 = tmp + 3 * k, t4 = tmp + 5 * k; 28 tmp = t4 + k; 29 printf("%d %d %d %d ", t1, t2, t3, t4); 30 } 31 return 0; 32 }