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的更多相关文章

  1. 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] + ...

  2. Codeforces Round #FF (Div. 1) A. DZY Loves Sequences

    题目链接: http://www.codeforces.com/contest/446/problem/A 题解: dp1[x]表示以x结尾的最大严格升序连续串,dp2[x]表示以x开头的最大严格升序 ...

  3. 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 ...

  4. Codeforces Round #FF (Div. 2) 题解

    比赛链接:http://codeforces.com/contest/447 A. DZY Loves Hash time limit per test 1 second memory limit p ...

  5. 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 ...

  6. 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 ...

  7. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列

    链接:http://codeforces.com/problemset/problem/447/D 题意:一个n*m的矩阵.能够进行k次操作,每次操作室对某一行或某一列的的数都减p,获得的得分是这一行 ...

  8. Codeforces Round #FF(255) DIV2

    A - DZY Loves Hash 水题,开辟一个数组即可 #include <iostream> #include <vector> #include <algori ...

  9. Codeforces Round #FF/#255 D DZY Loves Modification --贪心+优先队列

    题意:给你一个矩阵,每次选某一行或者某一列,得到的价值为那一行或列的和,然后该行每个元素减去p.问连续取k次能得到的最大总价值为多少. 解法: 如果p=0,即永远不减数,那么最优肯定是取每行或每列那个 ...

  10. Codeforces Round #FF (Div. 2) C. DZY Loves Sequences

    解题报告:输入一个数列,选取一个子数列,要求最多只能改动这个子数列中的一个数,使得这个子数列是严格的升序的(严格升序没有相等的) 我的做法是,第一步把这个 数列的每个升序的子数列都找出来,然后看这些子 ...

随机推荐

  1. Linux i2c 读写程序

    /* This software uses a BSD license. Copyright (c) 2010, Sean Cross / chumby industriesAll rights re ...

  2. VUE 密码验证与提示

    1. 概述 1.1 说明 vue项目中,为了较为明了的让用户看到所输入的密码信息的长度与复杂度是否满足要求,开发一个组件来满足此需求(当密码输入时进行密码验证操作,当密码的长度在8到24位之间,密码中 ...

  3. ACM-ICPC 2018 焦作赛区网络预赛 I Save the Room

    Bob is a sorcerer. He lives in a cuboid room which has a length of AAA, a width of BBB and a height ...

  4. js基础学习

  5. 阿里云-AliRepo

    <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name&g ...

  6. Oracle12c 性能优化攻略:攻略1-3: 匹配表类型与业务需求

    注:目录表 <Oracle12c 性能优化攻略:攻略目录表> 问题描述 你刚开始使用oracle数据库,并且学习了一些关于可用的各种表类型的知识.例如:可以在堆组织表.索引组织表等之间支出 ...

  7. Confluence 6 数据库表-系统信息(System information)

    这些表格有存储数据相关的状态和 Confluence 站点的相关配置信息. confversion 被用来在升级系统的时候确定那个数据库的版本应该使用,这个表格只对数据库升级有影响. pluginda ...

  8. mysql视图的作用

    测试表:user有id,name,age,sex字段 测试表:goods有id,name,price字段 测试表:ug有id,userid,goodsid字段 视图的作用实在是太强大了,以下是我体验过 ...

  9. MySQL之IDE工具介绍及数据备份

    一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...

  10. LeetCode(75):分类颜色

    Medium! 题目描述: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 ...