1. All X
1.1 基本思路
k和c的范围都不大,因此可以考虑迭代找循环节,然后求余数,判定是否相等。这题还是挺简单的。
1.2 代码

 1 /* 5690 */
 2 #include <iostream>
 3 #include <sstream>
 4 #include <string>
 5 #include <map>
 6 #include <queue>
 7 #include <set>
 8 #include <stack>
 9 #include <vector>
10 #include <deque>
11 #include <bitset>
12 #include <algorithm>
13 #include <cstdio>
14 #include <cmath>
15 #include <ctime>
16 #include <cstring>
17 #include <climits>
18 #include <cctype>
19 #include <cassert>
20 #include <functional>
21 #include <iterator>
22 #include <iomanip>
23 using namespace std;
24 //#pragma comment(linker,"/STACK:102400000,1024000")
25 
26 #define sti                set<int>
27 #define stpii            set<pair<int, int> >
28 #define mpii            map<int,int>
29 #define vi                vector<int>
30 #define pii                pair<int,int>
31 #define vpii            vector<pair<int,int> >
32 #define rep(i, a, n)     for (int i=a;i<n;++i)
33 #define per(i, a, n)     for (int i=n-1;i>=a;--i)
34 #define clr                clear
35 #define pb                 push_back
36 #define mp                 make_pair
37 #define fir                first
38 #define sec                second
39 #define all(x)             (x).begin(),(x).end()
40 #define SZ(x)             ((int)(x).size())
41 #define lson            l, mid, rt<<1
42 #define rson            mid+1, r, rt<<1|1
43 
44 typedef long long LL;
45 const int maxn = 10005;
46 int x;
47 LL m;
48 int c, k;
49 int visit[maxn];
50 
51 int main() {
52     ios::sync_with_stdio(false);
53     #ifndef ONLINE_JUDGE
54         freopen("data.in", "r", stdin);
55         freopen("data.out", "w", stdout);
56     #endif
57 
58     int t;
59     int tmp, ntmp;
60     LL i, cycle;
61 
62     scanf("%d", &t);
63     rep(tt, 1, t+1) {
64         scanf("%d%I64d%d%d", &x,&m,&k,&c);
65         printf("Case #%d:\n", tt);
66         memset(visit, -1, sizeof(visit));
67         ntmp = x % k;
68         cycle = -1;
69         for (i=1; i<=m; ++i) {
70             if (visit[tmp=ntmp] != -1) {
71                 cycle = i - visit[tmp];
72                 break;
73             }
74             visit[tmp] = i;
75             ntmp = (10*tmp + x) % k;
76         }
77 
78         if (cycle == -1) {
79             puts(tmp==c ? "Yes":"No");
80         } else {
81             LL n = ((m - visit[tmp]) % cycle + cycle) % cycle;
82             for (i=0; i<n; ++i)
83                 tmp = (10*tmp + x) % k;
84             puts(tmp==c ? "Yes":"No");
85         }
86     }
87 
88     #ifndef ONLINE_JUDGE
89         printf("time = %ldms.\n", clock());
90     #endif
91 
92     return 0;
93 }
View Code

相关文章: