周末狂欢赛1(玩游戏/Game,函数,JOIOI王国)

狂欢1

  • T1:玩游戏 / Game
    • 题目
    • 题解
    • 代码实现
  • T2:函数
    • 题目
    • 题解
    • 代码实现
  • T3:JOIOI王国
    • 题目
    • 题解
    • 代码实现

T1:玩游戏 / Game

题目

ljcc 和他的学妹在玩游戏,这个游戏共有 n 轮,在第 i 轮获胜会获得 i 分,没有平局。
现在给出 ljcc 和学妹的得分,求是否有一种方案符合当前得分。

输入格式
从标准输入读入数据。
输入一行输入两个数 代表 ljcc 和学妹的得分。
输出格式
输出到标准输出。

若有解,在一行输出一组合法的解。第一个数代表游戏总共进行了 n 轮,之后若干个数表示 ljcc 在哪些局获胜了,每两个数用单个空格隔开,行末不允许有空格。若没有合法解输出 No。

样例
样例输入
10 5
样例输出
5 1 2 3 4
数据范围与提示
a,b≤231-1,1≤n≤105

题解

首先No的情况很好想,运用等差数列公式跑一个O(n)O(n)O(n)看一下是否存在iii满足(1+i)∗i2==n\frac{(1+i)*i}{2}==n2(1+i)i==n
然后就是运用一点小技巧,我们发现对于一个[1,n][1,n][1,n]的数列,第iii项与第n−i+1n-i+1ni+1的和是一个定值n+1n+1n+1
所以仗着是specialspecialspecial judgejudgejudge我们就可以把scorescorescore一直抽丝剥茧,减肥,让它瘦到<n+1<n+1<n+1

代码实现

我写得比较复杂,用了许多特判,求轻喷,最后只想吐槽一下这个该死的longlonglong longlonglong
在这里插入图片描述

#include <cstdio>
#define MAXN 100000
#define LL long long
LL a, b, sum;
int main() {scanf ( "%lld %lld", &a, &b );LL i;bool flag = 0;for ( i = 1;i <= MAXN;i ++ ) {sum = ( i + 1 ) * i / 2;if ( sum == a + b ) {flag = 1;break;}}if ( ! flag )printf ( "No" );else {printf ( "%lld", i );if ( a <= i )printf ( " %lld", a );else if ( a <= i + i - 1 )printf ( " %lld %lld", a - i, i );else if ( b <= i ) {for ( LL j = 1;j <= i;j ++ )if ( j != b )printf ( " %lld", j );}else {LL x = 1, y = i;while ( a >= x + y ) {printf ( " %lld %lld", x, y );x ++;y --;a -= x + y;}if ( ! a )return 0;else {if ( x <= a && a <= y )printf ( " %lld", a );elseprintf ( " %lld %lld", x, a - x );}}}return 0;
}

T2:函数

题目

wls 有 n 个二次函数 Fi(x)=ai∗x2+bi∗x+ciFi(x) = a_i*x^2 + b_i*x + c_iFi(x)=aix2+bix+ci (1 ≤ i ≤ n).
现在他想在∑i=1nxi=m∑_{i=1}^nx_i = mi=1nxi=m 且 x 为正整数的条件下求∑i=1nFi(xi)∑_{i=1}^nFi(xi)i=1nFi(xi)的最小值。
请求出这个最小值。

Input
第一行两个正整数 n, m。
下面 n 行,每行三个整数 a, b, c 分别代表二次函数的二次项,一次项,常数项系数。
1 ≤ n ≤ m ≤ 100, 000
1 ≤ a ≤ 1, 000
−1, 000 ≤ b, c ≤ 1, 000
Output
一行一个整数表示答案。

Sample Input
2 3
1 1 1
2 2 2

Sample Output
13

题解

我们考虑对于一个函数f(x)f(x)f(x)△△,have a look↓:
f(x)=a∗x∗x+b∗x+cf(x)=a*x*x+b*x+cf(x)=axx+bx+c
f(x+1)=a∗(x+1)∗(x+1)+b∗(x+1)+cf(x+1)=a*(x+1)*(x+1)+b*(x+1)+cf(x+1)=a(x+1)(x+1)+b(x+1)+c
两式相减可得:△=f(x+1)−f(x)=2∗a+b△=f(x+1)-f(x)=2*a+b=f(x+1)f(x)=2a+b


首先nnn个函数要保证正整数,即每一个函数的xxx至少为1,接下来我们就要不停移动某一些函数的取值,就是△△要最小,我们就可以用优先队列维护每一条函数的△△,每次取队列的头,直到满足要求的mmm个即可
在这里插入图片描述

代码实现

#include <cstdio>
#include <queue>
using namespace std;
#define MAXN 500005
struct node {int id, val, idx;node () {}node ( int x, int y, int z ) {id = x;val = y;idx = z;}bool operator < ( const node &t ) const {return t.val < val;}
};
priority_queue < node > q;
int n, m, result;
int a[MAXN], b[MAXN], c[MAXN];int main() {scanf ( "%d %d", &n, &m );for ( int i = 1;i <= n;i ++ ) {scanf ( "%d %d %d", &a[i], &b[i], &c[i] );result += a[i] + b[i] + c[i];int t = ( a[i] << 1 ) + a[i] + b[i];q.push( node ( i, t, 2 ) );}m -= n;while ( ! q.empty() && m ) {m --;result += q.top().val;node t = q.top();q.pop();int tmp = ( a[t.id] << 1 ) * t.idx + a[t.id] + b[t.id];q.push( node ( t.id, tmp, t.idx + 1 ) );}printf ( "%d", result );return 0;
}

T3:JOIOI王国

题目

点击查看
JOIOI 王国是一个 H 行 W 列的长方形网格,每个 1×11 \times 11×1的子网格都是一个正方形的小区块。为了提高管理效率,我们决定把整个国家划分成两个省 JOIJOI 和 IOIIOI

我们定义,两个同省的区块互相连接,意为从一个区块出发,不用穿过任何一个不同省的区块,就可以移动到另一个区块。有公共边的区块间可以任意移动。

我们不希望划分得过于复杂,因此划分方案需满足以下条件:
区块不能被分割为两半,一半属 JOIJOI 省,一半属 IOIIOI 省。
每个省必须包含至少一个区块,每个区块也必须属于且只属于其中一个省。
同省的任意两个小区块互相连接。
对于每一行/列,如果我们将这一行/列单独取出,这一行/列里同省的任意两个区块互相连接。这一行/列内的所有区块可以全部属于一个省

现给出所有区块的海拔,第 i行第 j 列的区块的海拔为 Ai,jA_{i,j}Ai,j
设 JOI省内各区块海拔的极差(最大值减去最小值)为 RJOIR_{JOI}RJOI, IOI省内各区块海拔的极差为 RIOIR_{IOI}RIOI
在划分后,省内的交流有望更加活跃。但如果两个区块的海拔差太大,两地间的交通会很不方便。 因此,理想的划分方案是 max(RJOI,RIOI)max(R_{JOI},R_{IOI})max(RJOI,RIOI)尽可能小。

你的任务是求出 max(RJOI,RIOI)max(R_{JOI},R_{IOI})max(RJOI,RIOI) 至少为多大。

输入格式
第一行,两个整数 H,W用空格分隔。
在接下来的 H 行中,第 i 行有 W 个整数 Ai,1,Ai,2,⋯,Ai,WA_{i,1},A_{i,2}, \cdots ,A_{i,W}Ai,1,Ai,2,,Ai,W用空格分隔。
输入的所有数的含义见题目描述。
输出格式
一行,一个整数,表示 max(RJOI,RIOI)max(R_{JOI},R_{IOI})max(RJOI,RIOI)可能的最小值。

数据范围
对于 15%15\%15% 的数据,H,W⩽10H,W \leqslant 10H,W10
对于另外 45%45\%45% 的数据, H,W⩽200H,W \leqslant 200H,W200
对于所有数据, 2⩽H,W⩽2000,Ai,j⩽1092 \leqslant H,W \leqslant 2000,A_{i,j} \leqslant 10^92H,W2000,Ai,j109

输入输出样例
输入
4 4
1 12 6 11
11 10 2 14
10 1 9 20
4 17 19 10
输出
11

J J J I
J J J I
J J I I
J I I I

J J I I
J J J I
J J J I
J I I I
输入
8 6
23 23 10 11 16 21
15 26 19 28 19 20
25 26 28 16 15 11
11 8 19 11 15 24
14 19 15 14 24 11
10 8 11 7 6 14
23 5 19 23 17 17
18 11 21 14 20 16
输出
18

题解

首先要想到这个划分的矩阵一定是成单调性的,只可能如下图四种情况
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
如果不是单调的,那么肯定有一列或者一行的J,I区域划分会被断掉,不满足题意,应该很好理解吧,我就不画图了


接着便是思考算法,答案肯定是在[0,maxh−minh][0,maxh-minh][0,maxhminh]中的,于是我们可以考虑二分这个答案,然后去验证答案的正确性
那么如何验证答案的正确性呢?其实区域划分属于谁并不重要,我们只在乎是不是属于同一个省的区域

因此,我们就可以强制要求最高的区域是被划分在JOI省的,自然而然最低的区域就只能划分给IOI才能缩小答案
那么对于一个区域如果max−a[i][j]≤ansmax-a[i][j]≤ansmaxa[i][j]ans就代表着这个区域划分给JOI省是可以满足答案的,不难想到一个区域如果满足答案肯定是多划分给JOI省最好,这样就可以尽量减小剩下属于IOI省的区域的最大海拔,就可以尽可能地让IOI省也满足ans

对于一行假设我们已经找到了属于JOI的省,那么接下来就要验证IOI省的区域是否满足ans,因为最低的海拔区是IOI省的,所以IOI的其它区域都是高于最低海拔区的,那么如果每一个a[i][j]−min≤xa[i][j]-min≤xa[i][j]minx,ans就是合法的

最后看上图,我们画出来有四种划分的单调情况所以对于每一种情况的答案可能是不一样的,我们就要比较取最小值,
为此我画的四种图就画得很有技巧,仔细观察或者拿一张纸旋转,就可以出现以上四种情况,这暗示我们可以将矩阵旋转90°,180°,270°,代码的实现就是从行与列的中间断开进行交换,实现翻转
在这里插入图片描述

代码实现

#include <cstdio>
#include <iostream>
using namespace std;
#define MAXN 2005
#define INF 0x7f7f7f7f
int h, w, minn = INF, maxx = - INF, result = INF;
int a[MAXN][MAXN];bool check ( int x ) {int last = w;for ( int i = 1;i <= h;i ++ ) {int tmp = 0;for ( int j = 1;j <= last;j ++ ) {if ( maxx - a[i][j] <= x )tmp = max ( tmp, j );elsebreak;}last = tmp;for ( int j = tmp + 1;j <= w;j ++ )if ( a[i][j] - minn > x )return 0;}return 1;
}void solve ( int l, int r ) {int mid = ( l + r ) >> 1;if ( l > r )return;if ( check ( mid ) ) {result = min ( result, mid );solve ( l, mid - 1 );}elsesolve ( mid + 1, r );
}void reverse_row () {for ( int i = 1;i <= ( h >> 1 );i ++ )for ( int j = 1;j <= w;j ++ )swap ( a[i][j], a[h - i + 1][j] );
}void reverse_col () {for ( int i = 1;i <= h;i ++ )for ( int j = 1;j <= ( w >> 1 );j ++ )swap ( a[i][j], a[i][w - j + 1] );
} int main() {scanf ( "%d %d", &h, &w );for ( int i = 1;i <= h;i ++ )for ( int j = 1;j <= w;j ++ ) {scanf ( "%d", &a[i][j] );minn = min ( minn, a[i][j] );maxx = max ( maxx, a[i][j] );}solve ( 0, maxx - minn );reverse_row ();solve ( 0, maxx - minn );reverse_col ();solve ( 0, maxx - minn );reverse_row ();solve ( 0, maxx - minn );printf ( "%d\n", result );return 0;
} 

走了byebye在这里插入图片描述有问题欢迎子初

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用ABP只要加人即可马上加快项目进展(二) - 分工篇 - BDD实战篇 - .NET Core里跑Specflow...

这是<如何用ABP框架快速完成项目 >系列中的一篇文章。BDD很赞&#xff01;比TDD先进很多&#xff0c;能够大大提高编码效率。上一篇文章说了如何在.NET Core里安装Specflow. 然而文章成果只到了hello world级别。要想真的和实际业务结合&#xff0c;比如要能够IOC new cl…

【做题记录】CodeForces 做题记录

链接放的是洛谷上的链接&#xff0c;难度就是 CF 上的评分。 <details><summary>$\texttt{solution}$</summary></details> CF10D LCIS 难度&#xff1a;\(\tt{2800}\) 求两个串的最长公共上升子序列。\(n\le 500\) $\texttt{solution}$ 严重虚高题&am…

周末狂欢赛2(冒泡排序,概率充电器,不勤劳的图书管理员)

狂欢2T1&#xff1a;冒泡排序题目题解CODET2&#xff1a;概率充电器题目题解CODET3&#xff1a;不勤劳的图书管理员题目题解CODE我不这么认为。。。。 T1&#xff1a;冒泡排序 题目 下面是一段实现冒泡排序算法的 C代码&#xff1a; for(int i1; i<n; i)for(int j1; j&l…

P5659-[CSP-S2019]树上的数【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P5659 题目大意 给出nnn个点的一棵树&#xff0c;每个节点上有一个数字&#xff0c;你每次可以选择一条边删除然后交换连接的两个点的数字&#xff0c;在删完所有数字后设pip_ipi​表示数字iii所在节点编号&#xff0c;要求使…

YBTOJ洛谷P3195:玩具装箱(斜率优化dp)

传送门 文章目录前言解析代码前言 斜率优化dp&#xff0c;就是利用斜率优化的dp &#xff08;逃&#xff09; 解析 第一道斜优的题 分析题目 设sumisum_isumi​为1-i的c的前缀和 容易写出dp转移式&#xff1a; dpimin(dpj(sumi−sumji−j−1−L)2)dp_imin(dp_j(sum_i-sum_ji-…

01.微服务系列介绍

微服务系列实践 .NET CORE在开始之前呢&#xff0c;还是得废话一下&#xff0c;毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构&#xff0c;也让大家能初步的有一个了解&#xff0c;后续实践起来也有一个完整的概念&#xff0c;相对也会容易的多。互联网架构演变…

Walker

Walker 题意&#xff1a; 一个区间[0,n]&#xff0c;区间上有两个点&#xff0c;坐标分别是pos1&#xff0c;pos2&#xff0c;速度分别是v1&#xff0c;v2&#xff0c;这两个点是在移动&#xff0c;可以随时改变移动方向&#xff0c;问当区间的每一块均被一个点或两个点移动覆…

【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流

本blog重点是代码网络流的相关概念流网络(flow network)流(flow)网络的流残留网络(residual network)增广路径(augmenting path)Edmonds-Karp算法思想bfs模板调用EK&更新残留网络流模板luogu的AC代码(EK版)Dinic算法思路时间复杂度证明bfs模板模板1模板2dfs模板不带弧优化模…

Rainbond 5.0正式发布, 支持对接管理已有Kubernetes集群

今天很高兴的向大家宣布Rainbond v5.0正式发布&#xff0c;Rainbond是开源的企业应用云操作系统&#xff0c;支撑企业应用的开发、架构、交付和运维的全流程&#xff0c;通过无侵入架构&#xff0c;无缝衔接各类企业应用&#xff0c;底层资源可以对接和管理IaaS、虚拟机和物理服…

Fibonacci

Fibonacci 题意&#xff1a; f[i]表示第i位的斐波那契数列 给定n&#xff0c;求 题解&#xff1a; 这种题一开始没什么思路&#xff0c;那么枚举就行 g(x,y) 1 是当x * y为偶数时 x * y为偶数说明&#xff1a; x是偶数&#xff0c;y也是偶数 x是奇数&#xff0c;y是偶数 而…

基于.NET Standard的分布式自增ID算法--美团点评LeafSegment

概述前一篇文章讲述了最流行的分布式ID生成算法snowflake&#xff0c;本篇文章根据美团点评分布式ID生成系统文章&#xff0c;介绍另一种相对更容易理解和编写的分布式ID生成方式。实现原理Leaf这个名字是来自德国哲学家、数学家莱布尼茨的一句话&#xff1a;There are no two …

[费用流专题]Going Home,Minimum Cost,工作安排

文章目录T1&#xff1a;Going Home题目题解CODET2&#xff1a;Minimum Cost题目题解CODET3&#xff1a;工作安排题解CODET1&#xff1a;Going Home 题目 On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, e…

Sky Garden

Sky Garden 题意&#xff1a; 画n个圆和m条直线&#xff0c;圆的中心点为(0,0)&#xff0c;圆的半径分别从1到n&#xff0c;而直线都必经过(0,0)点&#xff0c;并且所有直线会把每个圆平均分成2m个面积相等的区域&#xff0c;直线会和圆形成交点&#xff0c;求所有交点两两经…

IdentityServer4-前后端分离的授权验证(六)

上两节介绍完Hybrid模式在MVC下的使用&#xff0c;包括验证从数据获取的User和Claim对MVC的身份授权。本节将介绍Implicit模式在JavaScript应用程序中的使用&#xff0c;使用Node.jsExpress构建JavaScript客户端&#xff0c;实现前后端分离。本节授权服务和资源服务器基于第四和…

人类智慧贪心

题意看起来很清新&#xff0c;代码实现也基本在入门难度&#xff0c;但是为什么我不会&#xff01; 另&#xff1a;反悔贪心 <details><summary>$\texttt{solution}$</summary></details> P2672 [NOIP2015 普及组] 推销员 $\texttt{solution}$ 发现答案…

周末狂欢赛3(跳格子,英雄联盟,排序问题)

文章目录T1&#xff1a;跳格子题目题解CODET2&#xff1a;英雄联盟题目题解CODET3&#xff1a;排序问题题目题解CODET1&#xff1a;跳格子 题目 n 个格子排成一列&#xff0c;一开始&#xff0c;你在第一个格子&#xff0c;目标为跳到第 n 个格子。在每个格子 i 里面你可以做…

想让AI在企业落地?微软最新Azure AI不容错过!

Microsoft Connect(); 2018 如期举行&#xff0c;大会上发布的众多顶尖技术&#xff0c;瞬间引爆了全球&#xff01;AI的高速发展&#xff0c;正在掀起新一波的创新浪潮。对于很多企业来说&#xff0c;AI创造的巨大价值&#xff0c;是不容错过的风口&#xff0c;大会上&#xf…

[费用流]数字配对,新生舞会

文章目录T1&#xff1a;数字配对题目题解CODET2&#xff1a;新生舞会题目题解CODE&#xff08;最大费用最大流版&#xff09;CODE&#xff08;最小费用最大流版&#xff09;T1&#xff1a;数字配对 题目 有 n 种数字&#xff0c;第 i 种数字是 ai、有 bi 个&#xff0c;权值是…

.NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

作为后端开发的我来说&#xff0c;前端表示真心玩不转&#xff0c;你如果让我微调一个位置的样式的话还行&#xff0c;但是让我写一个很漂亮的后台的话&#xff0c;真心做不到&#xff0c;所以我一般会选择套用一些开源UI模板来进行系统UI的设计。那如何套用呢&#xff1f;今天…

[FFT/IFFT]快速傅里叶(逆)变化 + 递归和递推模板

现在时间是2021-2-2&#xff0c;重新回来看2019学习的一知半解的FFTFFTFFT&#xff0c;又有了新的理解 所以修改了以往写过的文章&#xff0c;并增添些许内容 因为过去一年多&#xff0c;上了高中&#xff0c;学的知识多了些&#xff0c;以前不懂的有些东西现在看来挺简单的&am…