Codeforces round FF
Problem A:水题,直接gan
#include<bits/stdc++.h>
using namespace std;
const int N=;
int vis[N];
int main()
{
int p,n;
cin>>p>>n;
int flag=-;
for(int i=;i<=n;i++)
{
int g;
scanf("%d",&g);
int now=g%p;
if(!vis[now]) vis[now]=;
else
{
if(flag==-) flag=i;
}
}
if(flag==-) puts("-1");
else printf("%d\n",flag);
return ;
}
Problem B:水题,写的时候手贱,<26打成<25 wa了五次!!!!!
#include<bits/stdc++.h>
using namespace std;
const int N=*1e3;
int vis[];
int k,mx;
char a[N];
int main()
{
mx=-;
scanf("%s%d",a,&k);
for(int i=;i<=;i++)
{
scanf("%d",&vis[i]);
if(vis[i]>mx) mx=vis[i];
}
int ans=,len=strlen(a);
for(int i=;i<len;i++) ans+=(i+)*vis[a[i]-'a'];
int cnt=len+;
while(k--)
{
ans+=cnt*mx;
cnt++;
}
printf("%d\n",ans);
return ;
}
Problem C:
题目大意:给你n个数,求连续上升子序列,你将其中一个数该为任意值。
第一个思路:二分答案,看满不满足,可是判断满足的算法是n^2的 不行。
第二个思路:每个断点的前后都是上升序列,枚举这些段。。。这个算法按道理
是可以过的,可是写起来好麻烦啊啊啊啊啊,wawawawawa。
题解:先预处理处每个点的之前上升前缀和之后的上升前缀
枚举没点点当断点
if(a[i+1]-a[i-1]>1)
dp[i]=up[i-1]+down[i+1]+1;
else dp[i]=max(up[i-1],down[i+1])+1;
更新。。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int n,a[N],up[N],down[N],dp[N];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
up[]=;
for(int i=;i<=n;i++)
{
if(a[i]>a[i-]) up[i]=up[i-]+;
else up[i]=;
}
down[n]=;
for(int i=n-;i>=;i--)
{
if(a[i]<a[i+]) down[i]=down[i+]+;
else down[i]=;
}
dp[]=+down[];
dp[n]=+up[n-];
for(int i=;i<n;i++)
{
if(a[i+]-a[i-]>)
dp[i]=up[i-]+down[i+]+;
else dp[i]=max(up[i-],down[i+])+;
}
int ans=-;
for(int i=;i<=n;i++) ans=max(ans,dp[i]);
printf("%d\n",ans);
return ;
}
Problem D:
题目大意:给你一个n*m的矩阵,给你k个操作,每个操作你可以选其中一行或者其中一列,把他们的和加到ans中,然后这
一行或这一列每个元素减去p,让你求k个操作后ans的最大值。
题解:我们可以这么想,每当我们选取一行(列)时,每一列(行)都减去一个p,这样的话选取之后在列(行)中他们的
相对大小没有变化,所以行和列是完全可以独立开的,如果行数和列数都确定了这个ans值就是确定的和顺序没有关系。
本来我想用两个优先队列存行和列,然后模拟k次,每次取其中的最大值,可是这样是有bug的,正确做法是枚举行数和列数
取其中的最大值。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+;
const int M=1e6+;
ll n,m,k,p;
ll w[N][N];
ll c[M],r[M];
int main()
{
scanf("%I64d%I64d%I64d%I64d",&n,&m,&k,&p);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%I64d",&w[i][j]);
priority_queue<ll> col,row;
for(int i=;i<=n;i++)
{
ll ans=;
for(int j=;j<=m;j++) ans+=w[i][j];
col.push(ans);
}
for(int j=;j<=m;j++)
{
ll ans=;
for(int i=;i<=n;i++) ans+=w[i][j];
row.push(ans);
}
for(int i=;i<=k;i++)
{
ll now=col.top();col.pop();
c[i]=c[i-]+now;
col.push(now-m*p);
}
for(int i=;i<=k;i++)
{
ll now=row.top();row.pop();
r[i]=r[i-]+now;
row.push(now-n*p);
}
ll ans=c[]+r[k];
for(ll i=;i<=k;i++)
{
if((c[i]+r[k-i]-i*(k-i)*p)>ans) ans=c[i]+r[k-i]-i*(k-i)*p;
}
printf("%I64d\n",ans);
return ;
}
Codeforces round FF的更多相关文章
- DP Codeforces Round #FF (Div. 1) A. DZY Loves Sequences
题目传送门 /* DP:先用l,r数组记录前缀后缀上升长度,最大值会在三种情况中产生: 1. a[i-1] + 1 < a[i+1],可以改a[i],那么值为l[i-1] + r[i+1] + ...
- Codeforces Round #FF (Div. 1) A. DZY Loves Sequences
题目链接: http://www.codeforces.com/contest/446/problem/A 题解: dp1[x]表示以x结尾的最大严格升序连续串,dp2[x]表示以x开头的最大严格升序 ...
- Codeforces Round #FF (Div. 2)__E. DZY Loves Fibonacci Numbers (CF447) 线段树
http://codeforces.com/contest/447/problem/E 题意: 给定一个数组, m次操作, 1 l r 表示区间修改, 每次 a[i] + Fibonacci[i-l ...
- Codeforces Round #FF (Div. 2) 题解
比赛链接:http://codeforces.com/contest/447 A. DZY Loves Hash time limit per test 1 second memory limit p ...
- Codeforces Round #FF (Div. 1) B. DZY Loves Modification 优先队列
B. DZY Loves Modification 题目连接: http://www.codeforces.com/contest/446/problem/B Description As we kn ...
- Codeforces Round #FF (Div. 1) A. DZY Loves Sequences 动态规划
A. DZY Loves Sequences 题目连接: http://www.codeforces.com/contest/446/problem/A Description DZY has a s ...
- Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
链接:http://codeforces.com/problemset/problem/447/D 题意:一个n*m的矩阵.能够进行k次操作,每次操作室对某一行或某一列的的数都减p,获得的得分是这一行 ...
- Codeforces Round #FF(255) DIV2
A - DZY Loves Hash 水题,开辟一个数组即可 #include <iostream> #include <vector> #include <algori ...
- Codeforces Round #FF/#255 D DZY Loves Modification --贪心+优先队列
题意:给你一个矩阵,每次选某一行或者某一列,得到的价值为那一行或列的和,然后该行每个元素减去p.问连续取k次能得到的最大总价值为多少. 解法: 如果p=0,即永远不减数,那么最优肯定是取每行或每列那个 ...
- Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
解题报告:输入一个数列,选取一个子数列,要求最多只能改动这个子数列中的一个数,使得这个子数列是严格的升序的(严格升序没有相等的) 我的做法是,第一步把这个 数列的每个升序的子数列都找出来,然后看这些子 ...
随机推荐
- Scientific Toolworks Understand
Scientific Toolworks Understand是一款定位于代码阅读的软件.界面用Qt开发的. 软件特性: 1.支持多语言:Ada, C, C++, C#, Java, FORTRAN, ...
- JMeter实现唯一参数生成不重复时间戳
现象: 使用jmeter做接口压测时,总会遇到压测时,提示不允许重复id或提示订单不允许重复现象,那么如何解决呢? 原料工具 jmeter4.0 本地准备好接口服务 思路: 单个接口,小批量接口,一般 ...
- 监听本机tcp和udp的端口
#!/bin/bash #tcp part port1=`netstat -an|grep LISTEN|egrep "0.0.0.0|:::"|awk '/^tcp/ {prin ...
- mysql 中实现多条数据同时更新
有时间我们需要对一张表进行批量数据的更新.首先我们想的是update 语句. 比如对一张订单表order_info 多条数据更新, update order_inifo set order_cod ...
- headless&unittest
为什么要使用 headless 测试? headless broswer 可以给测试带来显著好处: 对于 UI 自动化测试,少了真实浏览器加载 css,js 以及渲染页面的工作.无头测试要比真实浏览器 ...
- STM32应用实例十五:STM32的ADC通道间干扰的问题
最近我们在开发一个项目时,用到了MCU自带的ADC,在调试过程中发现通道之间村在相互干扰的问题.以前其实也用过好几次,但要求都不高所以没有太关注,此次因为物理量的量程较大,所以看到了变化. 首先来说明 ...
- Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用
前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的.我们开发它的目的当然是要使用它来解决我们的实际问题.接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server ...
- 【MySql】like用法
LIKE用法 SELECT * FROM TABLE WHERE col Like '%a';//检索以a结尾的内容 SELECT * FROM TABLE WHERE col Like '%a%'; ...
- python 面向对象编程(初级篇)
飞机票 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最 ...
- 【Linux】系统基本命令
# lsb_release -a 查看系统版本# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cp ...