HDU - 4046 Panda
来源:互联网 发布:weka数据挖掘实验报告 编辑:程序博客网 时间:2024/04/28 07:47
HDU - 4046 Panda
1.题面
传送门
2.解题思路
表示题面很感人啊,看着看着就看到了《那些年》的歌词,感动死我了。What a sad day。感动归感动,题目还是要做的。其实就是给你一段仅由b,w,b,这三个字母组成的字符串,要求你支持两个操作,一是回答在[l,r]区间内有多少个连续的bwb,二是将区间中某个字符修改成另一个。
用树状数组解决掉的,我们讲这样一个字符串改成一个只含0,1 的数组,如果在i,i+1位,i+2位形成了一个bwb串,我们就将i位设置为1,否则设置为2。然后,对于每次的修改操作,可以看出,如果每次修改的是第i个位置的字符,最多只能影响到i-2,i-1,i三个位置的0,1数组的数值。计数的时候利用树状数组求某段区间和的操作即可。
错了挺多次是因为没有考虑到了r-l小于3的情况,这种情况下会没有输出。觉得挺有意义,所以保留的代码中所有debug部分。
然后提一句,没有取消cin与stdio的同步效率真的差很多,该代码没取消同步和取消同步后运行时间相差了差不都1000毫秒
3.解题代码
/***************************************************************** > File Name: tmp.cpp > Author: Uncle_Sugar > Mail: uncle_sugar@qq.com > Created Time: 2016年02月19日 星期五 09时45分39秒 ****************************************************************/# include <cstdio># include <cstring># include <cmath># include <cstdlib># include <iostream># include <iomanip># include <set># include <map># include <vector># include <stack># include <queue>using namespace std;const int debug = 1;const int size = 10000 + 10; typedef long long ll;struct DisjointSet{int *T,size,sum;int FindRoot(int i){return T[i] < 0 ? i : FindRoot(T[i]);}DisjointSet(){}DisjointSet(int _size):size(_size){T = new int[size];Init();}void Init(){sum = size;memset(T,-1,sizeof(int)*size);}bool Unioned(int i,int j){return FindRoot(i)==FindRoot(j);}void Union(int i,int j){if ( (i = FindRoot(i) ) != ( j = FindRoot(j) ) ){T[i] = T[i] + T[j];T[j] = i;sum--;}}int GetSum(int i){return -T[FindRoot(i)];}};DisjointSet dst(size);int TransTime[size];void Transport(){int a,b;cin >> a >> b;dst.Union(b,a);}void Query(){int x,d=0;cin >> x;while (dst.T[x]>=0){x = dst.T[x];d++;}cout << x << " " << -dst.T[x] << " " << d << '\n';} int main(){std::ios::sync_with_stdio(false);cin.tie(0);int i,j,k;int T,ncase=0;cin >> T;while (T--){cout << "Case " << (++ncase) << ":\n";int n,q;memset(TransTime,0,sizeof(TransTime));dst.Init();cin >> n >> q;char cmd[10];while (q--){cin >> cmd;switch(cmd[0]){case 'T':Transport();break;case 'Q':Query();break;}}}return 0;}
0 0
- hdu 4046 Panda
- hdu 4046 Panda
- hdu 4046 Panda
- HDU 4046 Panda
- HDU 4046 Panda
- hdu 4046 Panda
- hdu 4046 Panda
- HDU - 4046 Panda
- HDU 4046 Panda 树状数组
- 线段树 HDU 4046 panda
- hdu 4046 Panda 解题报告
- HdU 4046 Panda 线段树
- HDU 4046 Panda(树状数组)
- HDU 4046 Panda(线段树)
- [HDU 4046]Panda[线段树]
- HDU 4046 Panda (树状数组)
- HDU 4046 - Panda (线段树 + 单点更新)
- HDU 4046 Panda(树状数组)
- CMake+VS2013编译与安装32/64位PCL1.8RC1源码(附网盘链接)
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径[数据结构]
- Caffe训练过程:test_iter test_interval等概念
- Perl异常处理方法总结
- arm-linux-gcc工具链安装FreeTpye 编译的支持
- HDU - 4046 Panda
- CSS高级技巧
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 《Linux操作系统编译构建指南》
- 相对布局RelativeLayout详解
- OpenJudge百炼习题解答(C++)--题4040:买书问题
- Apache CXF 框架结构和基本原理
- 堆排序-java
- Android笔记之属性动画