摘要: 一个结论:一个数,如果它的所有数字之和能被3整除,那么这个数也能被3整除。最后一位肯定是0或者5,如果没有就impossible。剩下的就是,如何删除尽量少的数,使所有数字之和为3的倍数。情况比较多,注意考虑全面。 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 const int MAXN = 1010; 8 9 char str[MAXN]; 10 int cnt[14]; 11 int end; 12 13 void OutPut() 14 { 15 bool ok = f... 阅读全文
posted @ 2013-07-29 21:39 冰鸮 阅读(255) 评论(0) 推荐(0)
摘要: 先提个注意点,由于Lowbit(0) = 0,这会导致x递增的那条路径发生死循环,所有当树状数组中可能出现0时,我们都全部加一,这样可以避免0带来的麻烦~~简单: POJ 2299 Ultra-QuickSorthttp://acm.pku.edu.cn/JudgeOnline/problem?id=2299 求逆序数,可以用经典的归并排序做,也是基本的树状数组题目。 POJ 2352 Stars http://acm.pku.edu.cn/JudgeOnline/problem?id=2352 题目意思就是求每个星星左下方的星星的个数,由于y轴已经排序好了,我们可以直接用按x轴建立一维树状数 阅读全文
posted @ 2013-07-29 20:02 冰鸮 阅读(878) 评论(0) 推荐(0)
摘要: O(n^3)的时间复杂度,改了半天交了二三十遍,TLE到死,实在没办法了……跪求指点!!! 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int MAXN = 1010; 9 const int INF = 1 tempS[m] - K ) continue; 51 while ( tempS[st] = K ) //特殊情况,只覆盖一个点 82 { 83 flag = ... 阅读全文
posted @ 2013-07-29 19:44 冰鸮 阅读(439) 评论(0) 推荐(0)
摘要: 题意:设原数组为a[i],pos[i]代表第 i 个位置之前有多少个数比a[i]大,求原数组a[i]。这个题意是看了别人的题解才明白,我自己没读出来……方法:假设我们从左往右放,因为后面的数还有可能影响前面的数的位置,所以在最后一个数放完之前,我们没法确定每个数的位置,所以我们反过来考虑,从右往左放。因为每个数前面比它大的数的个数pos[i]已知,我们可以不必关心这些数的具体数值,从而转化为它从右往左走了多少个空格,即pos[i]个,因此这个数放在第 pos[i] + 1 个空格位置上。这个空格所在位置的下标id,即是a[i]。a[i] = id;树状数组或线段树记录区间[1, i ]的空格个 阅读全文
posted @ 2013-07-29 19:38 冰鸮 阅读(304) 评论(0) 推荐(0)