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
原创粉丝点击