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
解题报告:输入一个数列,选取一个子数列,要求最多只能改动这个子数列中的一个数,使得这个子数列是严格的升序的(严格升序没有相等的) 我的做法是,第一步把这个 数列的每个升序的子数列都找出来,然后看这些子 ...
随机推荐
- 转载:HBuilder常用快捷键
原文:http://www.cnblogs.com/DCL1314/p/8625110.html HBuilder常用快捷键 1.文件 新建 Ctrl + N 关闭 Ctrl + F4 全部关闭 Ct ...
- 是armhf,还是armel?
本文译至:https://blogs.oracle.com/jtc/entry/is_it_armhf_or_armel ARM处理器有各种品牌和规格,其中一部分的原因涉及到市场问题,成本,大小和功耗 ...
- ajax返回的欧洲字符(例如:法文)乱码
ajax返回值的乱码现象产生的相关代码如下: Java代码: JsonObject jsonObject = new JsonObject(); jsonObject.addProperty(&quo ...
- MYSQL事务处理失效原因
mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的 ...
- adb ( Android Debug Bridge)
adb ( Android Debug Bridge) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调试应用. adb工具的工 ...
- 你的B计划在哪里?
春节同学聚会,大家聊起近况. 甲在实体经济部门工作,企业效益不好,正酝酿减员增效,他忧心忡忡,跳槽都不知道怎么跳,因为全行业都不景气. 乙从事互联网工作,行业发展热火朝天,新事物层出不穷,但是他已人到 ...
- servlet web.xml配置选项详解
一般的web工程中都会用到web.xml,web.xml主要包括一些配置标签,例如Filter.Listener.Servlet等,可以用来预设容器的配置,可以方便的开发web工程.但是web.xml ...
- layui前端框架
项目中需要弹出层效果,使用了layui前端框架,主要使用了里面的弹出层特效(可以移动) html代码 要给这个标签绑定click方法 <a href='javascript:;' data-me ...
- Confluence 6 Windows 中以服务方式自动重启的原因
针对长时间使用的 Confluence,我们推荐你配置 Confluence 自动随操作系统重启而启动.针对一些 Windows 的服务器,这意味着需要让 Confluence 以服务的方式运行. 有 ...
- 配置 Confluence 6 安全的最佳实践
让一个系统能够变得更加坚固的最好办法是将系统独立出来.请参考你公司的安全管理策略和相关人员来找到你公司应该采用何种安全策略.这里有很多事情需要我们考虑,例如考虑如何安装我们的操作系统,应用服务器,数据 ...