【CF】207 Div.1 B.Xenia and Hamming

这题目一看很牛逼,其实非常easy。求求最小公倍数,最大公约数,均摊复杂度其实就是O(n)。

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

【CF】207 Div.1 B.Xenia and Hamming的相关文章

【CF】310 Div.1 C. Case of Chocolate

线段树的简单题目,做一个离散化,O(lgn)可以找到id.RE了一晚上,额,后来找到了原因. 1 /* 555C */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #include <vector> 9 #include <dequ

【CF】121 Div.1 C. Fools and Roads

题意是给定一棵树.同时,给定如下k个查询: 给出任意两点u,v,对u到v的路径所经过的边进行加计数. k个查询后,分别输出各边的计数之和. 思路利用LCA,对cnt[u]++, cnt[v]++,并对cnt[LCA(u, v)] -= 2.然后dfs求解各边的计数. 1 /* 191C */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #inc

【CF】196 Div.2 Book of Evil

显然这个图是一课树,看着题目首先联想到LCA(肯定是可以解的).但是看了一下数据大小,应该会TLE.然后,忽然想到一个前面做过的题目,大概是在一定条件下树中某结点旋转成为根后查询最长路径.结果灵感就来了,主要思路是对于每个结点,第一次dfs得到两个变量到P结点的最大值以及次大值.然后,第二次dfs对于当前结点u,u到它的子树中P类结点的最大距离已知(nd[u].mx),那么除u的其他结点v到P类结点的最大距离加上v到u的距离和的最大值为pmx,可以通过每次深搜计算出来,只要d大于等于两者的最大值

【CF】110 Div.1 B. Suspects

这题目乍眼一看还以为是2-sat.其实很水的,O(n)就解了.枚举每个人,假设其作为凶手.观察是否满足条件.然后再对满足的数目分类讨论,进行求解. 1 /* 156B */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #include <vec

【CF】174 Div.1 B Cow Program

思路是树形DP+状态压缩.其实仅有2个状态,奇数次来到x或者偶数次来到x.(因为对x的更新不同).同时开辟visit数组,解决环.注意,一旦遇到环结果就是-1.DP数组存放第奇数/偶数次来到x时,对y的改变两. 1 /* 283B */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include

【CF】259 Div.1 B Little Pony and Harmony Chest

还蛮有趣的一道状态DP的题目. 1 /* 435B */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #include <vector> 9 #include <deque> 10 #include <algorithm

【CF】142 Div.1 B. Planes

SPFA.注意状态转移条件,ans的求解需要在bfs中间求解.因为只要到了地点n,则无需等待其他tourist.还是蛮简单的,注意细节. 1 /* 229B */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #include <vector&g

【转载】用div+css模拟表格对角线

本文引用蓝色理想论坛. 首先声明: 这只是探讨一种CSS模拟表格对角线的用法,实际在工作中可能觉得这样做有点小题大作,这不是本主题讨论的重点.如果对此深以为然的朋友,请一笑过之... 有时在插入文档时,要用到表格对角线,常见的作法是用图片的方式来处理,还有就是用vml来画对角线,能不能用html+css方式来实现呢?答案是肯定的,下面我们来摸拟一个表格对角线. 原理: 用边框线来摸拟斜线,我们知道,如果将一个DIV的边框线设置得足够宽并定义了不同的颜色时,其相邻的两条边框线交界处就是斜线.知道了

【CF】38E Let&#39;s Go Rolling! (dp)

前言 这题还是有点意思的. 题意: 给你 \(n\) (\(n<=3000\)) 个弹珠,它们位于数轴上.给你弹珠的坐标 \(x_i\) 在弹珠 \(i\) 上面花费 \(C_i\) 的钱 可以使弹珠在原地不动 (\(-10^9<=x_i,C_i<=10^9\)),游戏开始时,所有的弹珠向左滚动,直到碰到定在原地不动的弹珠,其花费是其滚动的距离.总花费=开始前的花费+弹珠滚动的花费,问最小的花费是多少 题解 首先划分出阶段,,我们可以先将弹珠排序,前 \(i\) 个弹珠,最后一个固定的弹