都tm快一年了我还没补这套题……再不补怕是要留给退役后乐

Problem A

把$n * (n + 1)$的矩阵补成$(n + 1) * (n + 1)$的,然后高斯消元。

Problem B

一看题解:费用流,于是这个题直接交给队友。

Problem C

又是高斯消元……

Problem D

直接输出即可。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 1e2 + 10; int c[N][N], f[N][N];
int n, m, a, b; int main(){ while (~scanf("%d%d%d%d", &n, &m, &a, &b)){
rep(i, 1, n){
rep(j, 1, m) scanf("%1d", c[i] + j);
} rep(i, 1, n * a){
rep(j, 1, m * b){
int x = (i - 1) / a + 1;
int y = (j - 1) / b + 1;
printf("%d", c[x][y]);
}
putchar(10);
}
} return 0;
}

Problem E

占坑。

Problem F

首先可以肯定的是 $f_{0} + f_{1} + f_{2} + f_{3} = m^{3}$

那么计算出其中的$3$个就可以得到剩余的$1$个。

显然$f_{0}$和$f_{3}$是比较好求的。

所以$f_{1}$和$f_{2}$求出一个,问题就解决了。

大概是……$f_{2}$比较好求?

求$f_{3}$的时候记录一下有哪些三元组是符合这个条件的。

首先枚举两个数,把他们放在$(1, 2)$,$(1, 3)$,$(2, 3)$的位置,然后枚举剩下那个数可以是什么。

首先在$a[]$中没有出现的并且在$[1, m]$中的数肯定可以放,这个直接单独计算。

枚举在$a[]$中出现过的数,得到一个新的三元组,根据题意这个三元组要么计入$f_{2}$要么计入$f_{3}$。

那么看一下是否计入了$f_{3}$,如果不在就计入$f_{2}$

坑点:可能出现$a_{i} > m$的情况。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N = 2e2 + 10;
const int M = 1e7 + 10; LL f0, f1, f2, f3;
bitset <M> c, d, f;
int n, nn, m;
int tot;
int a[N], b[N]; void calc_f0(){
rep(i, 1, n) b[i] = a[i];
sort(b + 1, b + n + 1); int cnt = unique(b + 1, b + n + 1) - b - 1;
tot = cnt;
rep(i, 1, n) a[i] = lower_bound(b + 1, b + cnt + 1, a[i]) - b;
f0 = 0ll + m - cnt;
f0 = 1ll * f0 * f0 * f0;
} void calc_f1(){
f1 = 1ll * m * m * m - f0 - f2 - f3;
} void calc_f2(){ f2 = 0;
d.reset();
f.reset(); rep(i, 1, n - 1){
rep(j, i + 1, n){
int x = a[i] * tot + a[j];
if (d[x]) continue;
d.set(x);
f2 += 0ll + m - tot;
rep(k, 1, tot){
int y = a[i] * tot * tot + a[j] * tot + k;
if (!c[y]) f.set(y);
}
}
} d.reset(); rep(i, 1, n - 1){
rep(j, i + 1, n){
int x = a[i] * tot + a[j];
if (d[x]) continue;
d.set(x);
f2 += 0ll + m - tot;
rep(k, 1, tot){
int y = k * tot * tot + a[i] * tot + a[j];
if (!c[y]) f.set(y);
}
}
} d.reset(); rep(i, 1, n - 1){
rep(j, i + 1, n){
int x = a[i] * tot + a[j];
if (d[x]) continue;
d.set(x);
f2 += 0ll + m - tot;
rep(k, 1, tot){
int y = a[i] * tot * tot + k * tot + a[j];
if (!c[y]) f.set(y);
}
}
} f2 += 0ll + f.count();
} void calc_f3(){
int cnt = 0;
c.reset();
rep(i, 1, n - 2){
rep(j, i + 1, n - 1){
rep(k, j + 1, n){
int x = a[i] * tot * tot + a[j] * tot + a[k];
c.set(x);
}
}
} f3 = c.count();
} int main(){ while (~scanf("%d%d", &n, &m)){
nn = n;
n = 0;
rep(i, 1, nn){
int x;
scanf("%d", &x);
if (x >= 1 && x <= m) a[++n] = x;
} calc_f0();
calc_f3();
calc_f2();
calc_f1(); printf("%lld %lld %lld %lld\n", f0, f1, f2, f3);
} return 0;
}

  

Problem G

Problem H

Problem I

Problem J

2017 CCPC 湘潭邀请赛的更多相关文章

  1. 2018 CCPC 湘潭邀请赛 & 2018 JSCPC

    Problem A Problem B Problem C 这题用主席树轻松解决 可以二分答案,每次查询:也可以直接开个全局变量在主席树上二分: 时间复杂度$O(nlog^{2}n)$或$O(nlog ...

  2. 2017年 湘潭邀请赛(湖南)or 江苏省赛

    这套题是叉姐出的,好难啊,先扫一遍好像没有会做的题了,仔细一想好像D最容易哎 Super Resolution Accepted : 112   Submit : 178 Time Limit : 1 ...

  3. ccpc湘潭邀请赛 Partial Sum

    选定最多m的区间,使区间和的绝对值最大.但是左右端点不能重复选取 首先涉及到区间和的问题,就应该想到用前缀和去优化 这里对前缀和排序 然后贪心的去选取最大.次大 (比赛的时候脑子堵的很,没想出来 可惜 ...

  4. XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]

    2017江苏省赛的E题,当时在场上看错了题目没做出来,现在补一下…… 题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id ...

  5. 湘潭邀请赛+蓝桥国赛总结暨ACM退役总结

    湘潭邀请赛已经过去三个星期,蓝桥也在上个星期结束,今天也是时候写一下总结了,这应该也是我的退役总结了~ --------------------------------湘潭邀请赛----------- ...

  6. 1250 Super Fast Fourier Transform(湘潭邀请赛 暴力 思维)

    湘潭邀请赛的一题,名字叫"超级FFT"最终暴力就行,还是思维不够灵活,要吸取教训. 由于每组数据总量只有1e5这个级别,和不超过1e6,故先预处理再暴力即可. #include&l ...

  7. 湘潭邀请赛 Hamiltonian Path

    湘潭邀请赛的C题,哈密顿路径,边为有向且给定的所有边起点小于终点,怎么感觉是脑筋急转弯? 以后一定要牢记思维活跃一点,把复杂的事情尽量简单化而不是简单的事情复杂化. #include<cstdi ...

  8. 2017 ccpc哈尔滨 A题 Palindrome

    2017 ccpc哈尔滨 A题 Palindrome 题意: 给一个串\(T\),计算存在多少子串S满足\(S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)\) 思路: 很明显这里的回文串长 ...

  9. HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)

    题目链接  2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块.    分块的时候满足每个块是一个 ...

随机推荐

  1. DOS程序员手册(十五)

    837页 writeln('TRACING Current Buffer==='); holdup; bcbtrc(cvtbase^.curbfr); writeln; holdup ; writel ...

  2. c语言在windows下和Mac下的不同表现!

    最近给一个等级考试的C语言培训班上课,学生问起一些++的问题.让我好生为难.因为这些不同的编译器处理方式,在不同的系统下表现并不一致. 不管你洋洋洒洒论述多么一大篇,在事实面前就一下显得苍白了.虽然这 ...

  3. CodeForces-757B Bash's Big Day

    题目链接 https://vjudge.net/problem/CodeForces-757B 题目 Description Bash has set out on a journey to beco ...

  4. CSU-1986 玄学

    题目链接 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1986 题目 Description 阴阳师子浩君,最近从<初等数论 ...

  5. 爬虫:Scrapy16 - Spider Contracts

    Scrapy 通过合同(contract)的方式来提供了测试 spider 的集成方法. 可以硬编码(hardcode)一个样例(sample)url,设置多个条件来测试回调函数处理 response ...

  6. 用jQuery实现旋转木马效果(带前后按钮和索引按钮)

    项目中要用到旋转木马效果,一共5张图片轮播,并且点击对应的索引按钮能切换到对应的图片.本效果实在jquery.carousel.js插件的基础上做了一些改进,以实现上述需求. 效果图如下: 代码: H ...

  7. BZOJ 3223 Tyvj 1729 文艺平衡树 | Splay 维护序列关系

    题解: 每次reverse(l,r) 把l-1转到根,r+1变成他的右儿子,给r+1的左儿子打个标记就是一次反转操作了 每次find和dfs输出的时候下放标记,把左儿子和右儿子换一下 记得建树的时候建 ...

  8. POJ 2942 Knights of the Round Table 补图+tarjan求点双联通分量+二分图染色+debug

    题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中pus ...

  9. BZOJ2208 [Jsoi2010]连通数 【图的遍历】

    题目 输入格式 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. 输出格式 输出一行一个整数,表示该图的连通数. 输入样例 3 ...

  10. linux命令Netstat

    1.需求 了解Netstat命令 2.简介 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multi ...