Codeforces Round #272 (Div. 1) B 构造 math

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。

不过我的写法不是这样。。。(道理还是一样的)

 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\n", 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\n", t1, t2, t3, t4);
30     }
31     return 0;
32 }
View Code

 

posted @ 2016-08-23 20:44  知る奇迹に  阅读(154)  评论(0编辑  收藏  举报