【8.17校内测试】【模拟】【set】【网络流】
为什么每次想的最久的题得的分数最低!!!qwqwq
再也不在noip上尝试A*叻!!

模拟题,先把能消的消掉,双指针从两端向中间扫描,如果头尾合并可以消,就把它消掉,最后判断一下。因为消完过后num保留的是中间的个数,要把两端加上(实际就是一个循环节的长度
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std; ll n, m, k, a[];
ll color[], num[], cnt, tot; int main ( ) {
freopen ( "guass.in", "r", stdin );
freopen ( "guass.out", "w", stdout );
scanf ( "%I64d%I64d%I64d", &n, &m, &k );
for ( int i = ; i <= n; i ++ ) {
scanf ( "%I64d", &a[i] );
if ( !cnt || a[i] != color[cnt] ) {
cnt ++;
color[cnt] = a[i];
num[cnt] = ;
} else num[cnt] ++;
if ( num[cnt] == k ) num[cnt] = , cnt --;
}
for ( int i = ; i <= cnt; i ++ )
tot += num[i];
int h = , t = cnt;
while ( h < t && color[h] == color[t] ) {
if ( ( num[h] + num[t] ) % k == ) h ++, t --;
else {
num[h] = ( num[h] + num[t] ) % k;
num[t] = ;
break;
}
}
ll ans = ;
if ( h < t ) {
for ( int i = h; i <= t; i ++ ) ans += num[i];
ans *= ( m - );
ans += tot;
} else if ( h == t ) {
if ( m * num[h] % k == ) ans = ;
else {
ans = tot + num[h] * ( m - );
ans -= num[h] * m - num[h] * m % k;
}
}
printf ( "%I64d", ans );
return ;
}
/*
49 3 10 2
50 1 2 1
51 */

stl太强大了!!!这完全就是$set$模板题qwqwqwqwq。
发现行数很小,m=1时直接一遍扫,m=2时枚举第一行到第二行的断点,用前缀和直接计算,也是$O(n)$复杂度。
m=3时怎么做?在set中维护$pre[3][i]-pre[2][i]$,在枚举枚举1到2的断点时,在set中查找最优的2到3的断点,设此时只有1到2断点时答案为tmp,要使最终答案在$mod p$下最优,即尽量靠近$p-tmp-1$,在set中可以直接用lower_bound查找大于等于$p-tmp$的第一个位置,减一即为所求值的位置。还有一种情况,因为tmp和set中的值都mod了p,所以加起来不大于$2p$,直接查找最大值。两个值相比较更新答案。
#include<iostream>
#include<cstdio>
#include<set>
#define ll long long
using namespace std; set < ll > s;
int n, m;
ll pre[][], a[][], p, dp[][], S; int main ( ) {
freopen ( "candy.in", "r", stdin );
freopen ( "candy.out", "w", stdout );
scanf ( "%d%d%I64d", &n, &m, &p );
for ( int i = ; i <= m; i ++ )
for ( int j = ; j <= n; j ++ ) {
scanf ( "%I64d", &a[i][j] );
S += a[i][j];
pre[i][j] = ( pre[i][j-] + a[i][j] ) % p;
}
if ( m == ) {
printf ( "%I64d", pre[][n] );
} else if ( m == ) {
ll ans = ;
for ( int i = ; i <= n; i ++ )
ans = max ( ans, ( ( ( pre[][i] + pre[][n] ) % p - pre[][i-] ) % p + p ) % p );
printf ( "%I64d", ans );
} else if ( S < p ) {
for ( int i = ; i <= m; i ++ )
for ( int j = ; j <= n; j ++ )
dp[i][j] = max ( dp[i-][j]+a[i][j], dp[i][j-]+a[i][j] );
printf ( "%I64d", dp[m][n] );
} else {
ll ans = ;
for ( int i = n; i >= ; i -- ) {
ll tmp = ( ( ( pre[][i] + pre[][n] ) % p - pre[][i-] ) % p + p ) % p;
ll pp = ( ( ( ( pre[][n] - pre[][i-] ) % p + p - pre[][n] ) % p + p ) % p + pre[][i-] ) % p;
s.insert ( pp );
set < ll > :: iterator it, itt;
it = s.lower_bound ( p - tmp );
if ( it != s.begin ( ) ) it --;
itt = s.end ( );
if ( itt != s.begin ( ) ) itt --;
ans = max ( ans, max ( ( tmp + *it ) % p, ( tmp + *itt ) % p ) );
}
printf ( "%I64d", ans );
}
return ;
}

又是一道无脑最小割...所有点拆成出点和入点,之间正常建边,出点连向起点,流量为wi-,入点连向终点,流量为wi+,最小割即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std; int n, m, ru[], chu[], s, t; int stot = , nex[], tov[], f[], h[], hh[];
void add ( int u, int v, int ff ) {
tov[++stot] = v;
f[stot] = ff;
nex[stot] = h[u];
h[u] = stot; tov[++stot] = u;
f[stot] = ;
nex[stot] = h[v];
h[v] = stot;
} queue < int > q;
int dis[], vis[]; bool bfs ( ) {
memset ( dis, , sizeof ( dis ) );
memset ( vis, , sizeof ( vis ) );
q.push ( s ); vis[s] = ;
while ( !q.empty ( ) ) {
int u = q.front ( ); q.pop ( );
for ( int i = h[u]; i; i = nex[i] ) {
int v = tov[i];
if ( !vis[v] && f[i] ) {
dis[v] = dis[u] + ;
vis[v] = ;
q.push ( v );
}
}
}
return vis[t];
} int dfs ( int u, int delta ) {
if ( u == t ) return delta;
int res = ;
for ( int i = hh[u]; i && delta; i = nex[i] ) {
int v = tov[i];
if ( dis[v] == dis[u] + && f[i] ) {
int dd = dfs ( v, min ( delta, f[i] ) );
res += dd;
f[i] -= dd;
f[i^] += dd;
delta -= dd;
hh[u] = i;
}
}
return res;
} int main ( ) {
freopen ( "game.in", "r", stdin );
freopen ( "game.out", "w", stdout );
scanf ( "%d%d", &n, &m );
s = , t = n * + ;
for ( int i = ; i <= n; i ++ ) {
int w;
scanf ( "%d", &w );
add ( i + n, t, w );
}
for ( int i = ; i <= n; i ++ ) {
int w;
scanf ( "%d", &w );
add ( s, i, w );
}
for ( int i = ; i <= m; i ++ ) {
int u, v;
scanf ( "%d%d", &u, &v );
add ( u, v + n, inf );
}
int ans = ;
while ( bfs ( ) ) {
for ( int i = s; i <= t; i ++ )
hh[i] = h[i];
ans += dfs ( s, inf );
}
printf ( "%d", ans );
return ;
}
【8.17校内测试】【模拟】【set】【网络流】的更多相关文章
- 2017.9.17校内noip模拟赛解题报告
预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Ti ...
- 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】
Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要 ...
- 【8.30校内测试】【找规律模拟】【DP】【二分+贪心】
对于和规律或者数学有关的题真的束手无策啊QAQ 首先发现两个性质: 1.不管中间怎么碰撞,所有蚂蚁的相对位置不会改变,即后面的蚂蚁不会超过前面的蚂蚁或者落后更后面的蚂蚁. 2.因为所有蚂蚁速度一样,不 ...
- 基于iCamera测试模拟摄像头-TVP5150模块小结
基于iCamera测试模拟摄像头-TVP5150模块小结 首先先认识下模拟摄像头,相信大家都不陌生, CCD模拟摄像头 CMOS模拟摄像头 可以看到,ccd摄像头电路较复杂,接口少,而cmos摄像头, ...
- 【11.9校内测试】【倒计时1天】【ak欢乐赛】【多项式计算模拟】
然而AK失败了,就是因为这道摸你题:(最后一篇题解了吧?QAQ) Solution 模拟多项式乘法,其中的运算处理很像高精度,不过第$i$位代表的就是$x^i$前面的系数了. 好像去年的时候就讲了表达 ...
- 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】
Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...
- 【11.1校内测试】【快速幂DP】【带权并查集】【模拟】
Solution $jzy$大佬用了给的原根的信息,加上矩阵快速幂150行QAQ 然而$yuli$大佬的做法不仅好懂,代码只有50行! 快速幂的思想,把m看成要组成的区间总长度,每次将两段组合得到新的 ...
- 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】
一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...
- 【9.2校内测试】【开学祭】【exgcd】【树规(背包】【模拟】
比较裸的$exgcd$的应用? $exgcd$可以算出在$x$和$y$分别是最小正整数时的解.注意在这里因为有$a(x+\frac{b}{d})+b(y-\frac{a}{d})=c$,$d=gcd( ...
随机推荐
- 24、简述Python的深浅拷贝以及应用场景
深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...
- struts入门
1.概念
- ARP投毒攻击
原理:通过分别伪装成客户机和服务器IP,将自己的MAC地址绑定在IP上,ARP错误的将IP解析为中间人MAC地址,从而来欺骗服务器网关和客户机,使信息必须通过客户机.
- 3-Python内置结构-列表
目录 1 Python内置数据结构 1.1 数值型 1.2 math模块 1.3 round圆整 1.4 常用的其他函数 1.5 类型判断 2 列表 2.1 索引访问 2.2 列表和链表的区别 2.3 ...
- go标识符、变量、常量
标识符 标识符是用来表示Go中的变量名或者函数名,以字母或_开头.后可跟着字母.数字. _ 关键字 关键字是Go语言预先定义好的,有特殊含义的标识符. 变量 1. 语法:var identifier ...
- appium===常用方法介绍,元素定位
https://testerhome.com/topics/3711 元素定位方法: find_element_by_android_uiautomator ,使用uiautomator定位,后面参数 ...
- ubuntu12.04 svn ssl错误
1,ubuntu12.04 svn ssl错误提示: OPTIONS of '<url>': SSL handshake failed: SSL error: Key usage viol ...
- ECNA 2017
ECNA 2017 Abstract Art 题目描述:求\(n\)个多边形的面积并. solution 据说有模板. Craters 题目描述:给定\(n\)个圆,求凸包的周长. solution ...
- tyvj P1050 最长公共子序列
题目链接:http://tyvj.cn/p/1050 题解: 裸题,只是为了测试LCS模板写对没有…… #include<cstdio> #include<cstring> # ...
- MVC公开课 – 1.基础 (2013-3-15广州传智MVC公开课)
1.MVC设计模式 Model 是指 要处理的业务代码和数据操作代码 View 视图 主要是指的 跟用户打交道 并能够展示数据 Controller 看成是 Model和View的桥梁 优点: 1.1 ...