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
解题报告:输入一个数列,选取一个子数列,要求最多只能改动这个子数列中的一个数,使得这个子数列是严格的升序的(严格升序没有相等的) 我的做法是,第一步把这个 数列的每个升序的子数列都找出来,然后看这些子 ...
随机推荐
- centos中释放缓存的方法
释放缓存区内存的方法 a)清理pagecache(页面缓存) # > /proc/sys/vm/drop_caches 或者 # sysctl - b)清理dentries(目录缓存)和inod ...
- Golang -- Signal处理
我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有机会先执行一段清理代码,将收尾工作做完后再真正退出.我们采用系统Signal来 通知系统退出,即kill pragram-pid.我们 ...
- PHP中get请求中参数的key不能是para
¶会被转化成¶,然后就无法进行下去了. 仅作记录.
- Python-爬虫-租房Ziroom
目标站点需求分析 涉及的库 import requestsimport timeimport pymongofrom lxml import etreefrom requests.exceptions ...
- 详解 HTTPS、TLS、SSL、HTTP区别和关系
一.什么是HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL ...
- 用VS制作的windows服务安装包 安装完后如何让服务自动启动
vs 服务做成安装包,如何安装以后启动服务,只要在类名为projectinstaller的类中重写commit事件即可 public override void Commit(IDic ...
- maven install 报错 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
1.控制台打印信息 [INFO] Scanning for projects... [INFO] [INFO] ---------------------< org.cqupt.mauger:R ...
- RianbowDesign
换了很多个名字,最后换成这个. 主要考虑把自己所学的.所经历的都结合到一起,用这种方式来保持热情. 算是一个设计网站,管理咨询,游戏设计,平面logo之类,想最多地攘括到里边.就像自己不确定的主业一样 ...
- samba 二进制包 tar.gz 安装
一.下载 sudo wget https://download.samba.org/pub/samba/stable/samba-4.8.10.tar.gz 二.解压 sudu tar -xvzf s ...
- re模块(正则)
一, 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 在python中,正则内嵌在python中,并通过re模块实现,正则表达模式被编译成一系列 ...