看起来比较舒服的矩阵乘法模板
转载源页面
poj 3070
1 |
|
转载源页面
poj 3070
1 |
|
参见:转载前页面
怎么读题时就没发现“每行每列各有一个水阀”?这是把问题转化成二分图模型的关键啊
1 |
|
像这样搞错映射关系,不是个很好的情况
1 |
|
1.不能随意hack,hack成功有加分,但是hack失败也会扣分!
2.不要随意提交已经AC的题目,罚时是这样的:最后一次AC的之前所有提交(无论AC与否)均算作罚时!其中AC的标为Accepted(Past),被hack掉的AC也会标为Accepted(Past)。
3.AC不代表真正的AC,比赛最后阶段有hack数据,如果被hack掉就不算AC。hack数据一般都是非常变态的输入,或者是大数据!有时候有些人刻意利用题目bug构造变态的数据导致全场无人AC……
4.hack时只能读别人的代码,无法复制,这是锻炼读代码的能力。
5.如果有一场比赛注册了,但是忘做了,只要没有该场比赛的提交记录就不会使Rating降低。
6.只有本场比赛进入前300才能使Rating升高,否则就降低。
7.ABCD四道题的难度是依次升高的,分数也是依次升高的,根据错的次数和AC时间而使所得分数不同。
8.比赛题目是民间的ACMer出的,如果发现题目中有大量的英语语法错误,请不要见怪。
9.比赛日期并非固定在周五或者周六或者周日,根据杭电oj的具体日程安排而定。比如,如果有网络赛,可能就要提前或者延后了。
10.最后你的很多AC的题目可能都会被hack掉,请不要见怪。
11.
以上错误我几乎都犯过……
O__O”…
1001 - Rikka with string
Accepts: 395
Submissions: 2281
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:
One day, Yuta got a string which contains n letters but Rikka lost it in accident. Now they want to recover the string. Yuta remembers that the string only contains lowercase letters and it is not a palindrome string. Unfortunately he cannot remember some letters. Can you help him recover the string?
It is too difficult for Rikka. Can you help her?
Input
This problem has multi test cases (no more than 20). For each test case, The first line contains a number n(1≤n≤1000). The next line contains an n-length string which only contains lowercase letters and ‘?’ – the place which Yuta is not sure.
Output
For each test cases print a n-length string – the string you come up with. In the case where more than one string exists, print the lexicographically first one. In the case where no such string exists, output “QwQ”.
Sample Input
5
a?bb?
3
aaa
Sample Output
aabba
QwQ
WA得智商都被拉低了 QAQ
1 | int dfs(int step,bool &state)//1:to check |
AC:
1 |
|
线段树或树状数组求逆序数
求逆序数的方法有分治,归并,本文只介绍线段树或树状数组求逆序数的办法,众所周知,线段树和树状树可以用来解决区间操作问题,就是因为这两个算法区间操作的时间复杂度很低O(logN),才让这种方法具有可行性。
首先先来看一个序列 6 1 2 7 3 4 8 5,此序列的逆序数为5+3+1=9。冒泡法可以直接枚举出逆序数,但是时间复杂度太高O(n^2)。冒泡排序的原理是枚举每一个数组,然后找出这个数后面有多少个数是小于这个数的,小于它逆序数+1。仔细想一下,如果我们不用枚举这个数后面的所有数,而是直接得到小于这个数的个数,那么效率将会大大提高。
总共有N个数,如何判断第i+1个数到最后一个数之间有多少个数小于第i个数呢?不妨假设有一个区间 [1,N],只需要判断区间[i+1,N]之间有多少个数小于第i个数。如果我们把总区间初始化为0,然后把第i个数之前出现过的数都在相应的区间把它的值定为1,那么问题就转换成了[i+1,N]值的总和。再仔细想一下,区间[1,i]的值+区间[i+1,N]的值=区间[1,N]的值(i已经标记为1),所以区间[i+1,N]值的总和等于N-[1,i]的值!因为总共有N个数,不是比它小就是比它(大或等于)。
现在问题已经转化成了区间问题,枚举每个数,然后查询这个数前面的区间值的总和, i-[1,i] 既为逆序数。
线段树预处理时间复杂度O(NlogN),N次查询和N次插入的时间复杂度都为O(NlogN),总的时间复杂度O(3*NlogN)
树状数组不用预处理,N次查询和N次插入的时间复杂度都为O(NlogN),总的时间复杂度O(2*NlogN)
线段树:
1 | // 线段树 |
树状数组:
1 | // 树状数组 |
线段树/树状数组的另一种用法不会,它的逆向问题更不会
难以容忍的两个WA
Problem C
1 | int main() |
1 |
|
=====================================
Problem F
罕见的PE,输出末尾不能有多余空格,防不胜防
1 |
|
1 | int main() |
Problem E
裸的并查集
1 | const int maxn=2e5; |
=====================
还有个来不及提交的![个人原因,15:26才加入比赛
Problem H
1 | const int maxn=2e4; |