摘要:
题意:有n个元素,开始每个元素自己一栈,有两种操作,将含有元素x的栈放在含有y的栈的顶端,合并为一个栈。第二种操作是询问含有x元素下面有多少个元素。分析:并查集,因为当我们知道栈中元素的总数,和某元素到栈顶的距离,我们就能知道这个元素下面有多少元素。我们并操作的时候,始终使用在上面栈的代表元来做合并之后的代表元,这样也就达到了栈中的代表元是栈中的堆顶元素的效果,我们只需在每个代表元中记录该栈中的元素总数即可。然而我们还需要得知某元素到代表元的距离,这样我们就需要记录每个元素到其父亲的距离,把它到代表元上所经过的距离加起来,即为它到代表元的距离。这样我们就得出了结果。另外优化的过程(把路上所有元 阅读全文
摘要:
模拟题,题目不难,但是在字符串处理上比较麻烦View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;#define maxn 101struct Term{ int s[maxn]; char ch[maxn];}term[maxn];string word[maxn];string st;int n, m, termnum[maxn];bool i 阅读全文
摘要:
简单的模拟View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define maxn 100string st;int n;bool left(int a){ for (int i = a - 1; i >= 0; i--) { if (st[i] == '|' || st[i] == '\\' || st[i] 阅读全文
摘要:
简单的模拟,字符串题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define maxn 100string st;char pairs[maxn][2];bool ok(char a, char b, int x){ for (int i = 0; i < x; i++) if (pairs[i][0] == a && p 阅读全文
摘要:
简单题,View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int t, n; scanf("%d", &t); for (int i = 0; i < t; i++) { scanf("%d", &n 阅读全文
摘要:
简单的字符串题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); string st; while (getline(cin, st) && st != "#") { int sum = 0; for (int i = 0; i 阅读全文
摘要:
简单题,货币换算View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int t, n, tt = 0; scanf("%d", &t); while (t--) { tt++; scanf("%d", &n) 阅读全文