【NKOJ三校 初中新年大联欢DIV2】考试游记

目录

  1. 看不见的手
  2. ljj的方块
  3. 零它来了
  4. 宝石转换
  5. ljj的距离
  6. 零它走了
  7. 彩蛋

题目

【A NKOJ-P8629】 看不见的手 40pts

A-题面

考试思路:

这道题一看数据范围就知道是 O ( n ) O(n) O(n)的结论题,考试的时候脑子抽筋偏分输出1得了40pts;

正解:

他说呆呆会使总利润最高,那我们就从呆呆的角度去思考他的最优解;不难发现,呆呆赚取的利润是   卖出点价格 − 买入点价格 {\small\ \mathsf{卖出点价格}-\mathsf{买入点价格}}  卖出点价格买入点价格;而在每个点呆呆可以买很多个口罩( T T T允许的话),所以呆呆肯定会在使数对 ( a i , a j ) (a_i,a_j) (ai,aj) a j − a i a_j-a_i ajai差值最大的 ( i , j ) (i,j) (i,j)点买入卖出;而我们要使呆呆少赚钱,我们只需要将这个数对变为: ( a i + 1 , a j )   或 ( a i , a j − 1 ) (a_i+1,a_j){\small\ \mathsf{或}}(a_i,a_j-1) (ai+1,aj) (ai,aj1),花费为1;

思路很明显了,由于使 a j − a i a_j-a_i ajai差值最大的 ( i , j ) (i,j) (i,j)可能不止一个,所以我们只需要求出这样的 ( i , j ) (i,j) (i,j)有多少个再乘上每一个数对的价值 1 1 1,就是答案

Ac Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,t,a[100005];
int minnum,maxnum,ans;
signed main(){
   
	scanf("%lld%lld",&n,&t);
	for(int i=1;i<=n;i++){
   scanf("%lld",&a[i]);}
	minnum=a[1];
	for(int i=2;i<=n;i++){
   
		minnum=min(minnum,a[i-1]);
		if(a[i]-minnum>maxnum){
   
			maxnum=a[i]-minnum;
			ans=0;
		}
		if(a[i]-minnum==maxnum){
   ans++;}
	}
	printf("%lld",ans);
	return 0;
}

【B NKOJ-P10089】ljj的方块 15pts

B-题面

考试思路:

输出0,直接骗分;(逃

正解:

先枚举其中任意两个有小黑子的点,在用公式推出剩余两个点的坐标,判断这两个点是否是在小黑子上,推理过程如图,其中涂色三角形是全等的,我们可以利用全等导边;(这个十分滴恶心)
B-推论
所以我们可以得到下面的结论
x 1 = y y + ( x − x x ) y 1 = x x + ( y − y y ) x 2 = y + ( x − x x ) y 2 = x + ( y − y y ) x1=yy+(x-xx) \\ y1=xx+(y-yy) \\ x2=y+(x-xx) \quad \\ y2=x+(y-yy)\quad x1=yy+(xxx)y1=xx+(yyy)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值