Codeforces Round #353 (Div. 2) A. Infinite Sequence

题目链接:

http://codeforces.com/contest/675/problem/A

题意:

给你一个等差数列,问你b是不是其中的一项。

即是否存在大于等于0的整数k使得a+k*c==b。只要求(b-a)%c==0&&(b-a)/c>=0就可以了。

但是,我就是写成了二分。。而且还写搓了。。

先看看哇的代码:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 
 7 const int maxn = 333;
 8 const int INF = 1e9;
 9 
10 int main() {
11     int a, b, c;
12     while (scanf("%d%d%d", &a, &b, &c) == 3) {
13         if (c == 0) {
14             if (b == a) puts("YES");
15             else puts("NO");
16             continue;
17         }
18         int low, hig,flag;
19         if (c < 0) {
20             flag = 0;
21             low=0, hig = (-INF - a) / c + 10;
22             if (b > a) {
23                 puts("NO"); continue;
24             }
25             while (low < hig-1) {
26                 int mid = low + (hig - low) / 2;
27                 if (a + mid*c>b) {
28                     low = mid + 1;
29                 }
30                 else if (a + mid*c < b) {
31                     hig = mid;
32                 }
33                 else {
34                     flag = 1; break;
35                 }
36             }
37             if (flag) puts("YES");
38             else puts("NO");
39         }
40         else if (c>0) {
41             flag = 0;
42             low = 0, hig = (INF - a) / c + 10;
43             if (b < a) {
44                 puts("NO"); continue;
45             }
46             while (low < hig - 1) {
47                 int mid = low + (hig - low) / 2;
48                 if (a + mid*c<b) {
49                     low = mid + 1;
50                 }
51                 else if (a + mid*c > b) {
52                     hig = mid;
53                 }
54                 else {
55                     flag = 1; break;
56                 }
57             }
58             if (flag) puts("YES");
59             else puts("NO");
60         }
61     }
62     return 0;
63 }

以后写二分以此为鉴。。

贴修改之后的:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 
 7 const int maxn = 333;
 8 typedef long long LL;
 9 const LL INF = 1e9;
10 
11 int main() {
12     int a, b, c;
13     while (scanf("%d%d%d", &a, &b, &c) == 3) {
14         if (c == 0) {
15             if (b == a) puts("YES");
16             else puts("NO");
17             continue;
18         }
19         LL low, hig;
20         if (c < 0) {
21             low = 0, hig = (-INF - a) / c + 10;
22             if (b > a) {
23                 puts("NO"); continue;
24             }
25             while (low < hig - 1) {
26                 LL mid = low + (hig - low) / 2;
27                 if (a + mid*c>=b) {
28                     low = mid;
29                 }
30                 else if (a + mid*c < b) {
31                     hig = mid;
32                 }
33             }
34             if (a + low*c == b) puts("YES");
35             else puts("NO");
36         }
37         else if (c>0) {
38             low = 0, hig = (INF - a) / c + 10;
39             if (b < a) {
40                 puts("NO"); continue;
41             }
42             while (low < hig - 1) {
43                 LL mid = low + (hig - low) / 2;
44                 if (a + mid*c<=b) {
45                     low = mid;
46                 }
47                 else if (a + mid*c > b) {
48                     hig = mid;
49                 }
50             }
51             if (a + low*c == b) puts("YES");
52             else puts("NO");
53         }
54     }
55     return 0;
56 }
原文地址:https://www.cnblogs.com/fenice/p/5522083.html