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
解题报告:输入一个数列,选取一个子数列,要求最多只能改动这个子数列中的一个数,使得这个子数列是严格的升序的(严格升序没有相等的) 我的做法是,第一步把这个 数列的每个升序的子数列都找出来,然后看这些子 ...
随机推荐
- 【原创】大叔经验分享(36)CM部署kafka
1 下载kafka parcel http://archive.cloudera.com/kafka/parcels/latest/KAFKA-3.1.1-1.3.1.1.p0.2-el7.parce ...
- socket原理-基于UDP的套接字-基于TCP实现远程命令-粘包
- Android一个自定义的进度环:ProgressChart
源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/ProgressChart.zip 因项目需要,自己尝试定义了一个进度环,用于显示进度,实现效果如 ...
- 关于STM32 __IO 的变量定义
这个_IO 是指静态 这个 _IO 是指静态 volatile uint32_t 是指32位的无符号整形变量uint32_t 是指32位的无符号整形变量: 搞stm32这么久了,经常看到stm32里面 ...
- ORACLE环境变量定义
export在linux的bash中可以理解为设置环境变量.设置后能够被当前的shell及子shell使用. 这些变量的含义有一些有意义,可以查看相应的文档,我给你解释一些我知道的: ORACLE_H ...
- Confluence 6 使用 Apache 的 mod_jk
在 Confluence 6 及其后续版本中,不能使用 mod_jk 来做代理.这是因为 Synchrony 服务导致的这个限制. Synchrony 在协同编辑的时候需要启动,同时还不能接受 A ...
- 后RCNN时代的物体检测及实例分割进展
https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650736740&idx=3&sn=cdce446703e69b ...
- js获取url参数值,并解决中文乱码
<script type="text/javascript"> function GetQueryString(name) { var reg = new RegExp ...
- JavaScript(JS)之Javascript对象
简介: 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String.Math.Array.Date.RegExp都是Jav ...
- C++ Primer 笔记——OOP
1.基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作也是如此. 2.任何构造函数之外的非静态函数都可以是虚函数,关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定 ...