为什么每次想的最久的题得的分数最低!!!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】【网络流】的更多相关文章

  1. 2017.9.17校内noip模拟赛解题报告

    预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Ti ...

  2. 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】

    Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要 ...

  3. 【8.30校内测试】【找规律模拟】【DP】【二分+贪心】

    对于和规律或者数学有关的题真的束手无策啊QAQ 首先发现两个性质: 1.不管中间怎么碰撞,所有蚂蚁的相对位置不会改变,即后面的蚂蚁不会超过前面的蚂蚁或者落后更后面的蚂蚁. 2.因为所有蚂蚁速度一样,不 ...

  4. 基于iCamera测试模拟摄像头-TVP5150模块小结

    基于iCamera测试模拟摄像头-TVP5150模块小结 首先先认识下模拟摄像头,相信大家都不陌生, CCD模拟摄像头 CMOS模拟摄像头 可以看到,ccd摄像头电路较复杂,接口少,而cmos摄像头, ...

  5. 【11.9校内测试】【倒计时1天】【ak欢乐赛】【多项式计算模拟】

    然而AK失败了,就是因为这道摸你题:(最后一篇题解了吧?QAQ) Solution 模拟多项式乘法,其中的运算处理很像高精度,不过第$i$位代表的就是$x^i$前面的系数了. 好像去年的时候就讲了表达 ...

  6. 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】

    Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...

  7. 【11.1校内测试】【快速幂DP】【带权并查集】【模拟】

    Solution $jzy$大佬用了给的原根的信息,加上矩阵快速幂150行QAQ 然而$yuli$大佬的做法不仅好懂,代码只有50行! 快速幂的思想,把m看成要组成的区间总长度,每次将两段组合得到新的 ...

  8. 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】

    一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...

  9. 【9.2校内测试】【开学祭】【exgcd】【树规(背包】【模拟】

    比较裸的$exgcd$的应用? $exgcd$可以算出在$x$和$y$分别是最小正整数时的解.注意在这里因为有$a(x+\frac{b}{d})+b(y-\frac{a}{d})=c$,$d=gcd( ...

随机推荐

  1. 【C++自我精讲】基础系列六 PIMPL模式

    [C++自我精讲]基础系列六 PIMPL模式 0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implemen ...

  2. 【日期控件】JQueryUI的datepicker日期控件

    在输入日期的时候我们经常需要日期控件,jQueryUI的datapicker就是一个很好的日期控件. 1.简单的datepicker控件 目录结构:(要将images图片放到css目录下面)

  3. python实战===python程序打包成exe

    推荐PyInstaller项目www.pyinstaller.org   安装方法: 先跑pip install pywin32再跑pip install pyinstaller即可 可用一句命令打包 ...

  4. Power Profiles for Android

    http://source.android.com/devices/tech/power.html Battery usage information is derived from battery ...

  5. Django项目上传到AWS服务器上

    EC2是亚马逊(Amazon.com)提供的弹性云计算服务:Apache是一个跨平台的Web服务器端软件,可以使Python.PHP.Perl等语言编写的程序运行在服务器上:Django是一个Web程 ...

  6. angular项目中使用ngSemantic

    npm install ng-semantic --save npm install jquery --save 下载 Official Semantic UI bundle ( .zip ) fro ...

  7. nginx 服务器篇

    Nginx 服务器类型 1. Web服务器 Web服务器用于提供HTTP(包括HTTPS)的访问,例如Nginx.Apache.IIS等. 2. 应用程序服务器 应用程序服务器能够用于应用程序的运行, ...

  8. C++的一大误区——深入解释直接初始化与复制初始化的区别

      转自:http://blog.csdn.net/ljianhui/article/details/9245661 不久前,在博客上发表了一篇文章——提高程序运行效率的10个简单方法,对于其中最后一 ...

  9. currentTime安卓

    设定一个时间编写CurrentTime类设置属性为该时间用toString显示该时间我使用的currentTime ,苹果用起来是好使得为什么.安卓走到下面这一步却不接着走呢!!! e.current ...

  10. mvc部署

    权限中加入windows 2008中加入SERVICE,windows2003中加入NETWORK SERVICE