摘要:
树状数组题意:有两排城市,这两排之间有一些城市之间有连接的道路,给出所有道路,问有多少道路是相交的。分析:求逆序数。我们先把所有的道路按照a升序,a相同时b升序的方法排列。这样从头至尾便利,对于每条道路,我们只需要知道它之前有多少道路的b大于它的b就可以了,所以我们只要知道前面有多少b小于等于它的再用下标减去就可以了。而这个求有多少小于等于的过程就用树状数组来实现。我们每看到一条边,就把它的b作为下标,把树状数组对应位进行修改。这样一来,树状数组所有下标小于等于该道路的b的数的总和就是我们要求的b小于等于该道路的道路数。开始我看了一个程序,是按照b降序,b相同时a升序。每次找a比它小的,这样很 阅读全文
摘要:
简单题View Code #include <stdio.h>char st;int main(){ //freopen("D:\\t.txt", "r", stdin); while (scanf("%c", &st) != EOF) printf("%c", st); return 0;} 阅读全文
摘要:
用一个队列就可以解决,别忘了没答案要输出0。View Code #include <stdio.h>#define maxn 100005int f[maxn], n, s;void input() { int i; scanf("%d%d", &n, &s); for (i = 0; i < n; i++) scanf("%d", &f[i]);}int main() { //freopen("D:\\t.txt", "r", stdin); int t; scanf(& 阅读全文
摘要:
用c语言写的,memset不用包含头文件题意:矩阵上有一些小行星,占据了一些格子,我们每次操作可以清理一列中的所有小行星,也可以清理一行中的所有小行星,问最少进行多少次操作可以清理掉所有的小行星。分析:一个小行星,要么清理该行,要么该列。所以也就是每个小行星对应的行列中至少选择一样来清理。下面建图,如果我们把每行看成集合一中的点,每列看成集合二中的点,一个小行星看成是其对应行列的连线,那么也就是说不能存在某一条连线两边的点都没有被选中的情况。这恰好就是二分图最小点集覆盖的要求。最小点集覆盖==最大匹配。在这里解释一下原因。首先,最小点集覆盖一定>=最大匹配,因为假设最大匹配为n,那么我们 阅读全文
摘要:
简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int main(){ //freopen("D:\\t.txt", "r", stdin); int t; scanf("%d", &t); while (t--) { int a, b, c; scanf("%d%d%d", &a, & 阅读全文