首页 > 其他分享 >C - sum(牛客小白月赛102)

C - sum(牛客小白月赛102)

时间:2024-10-18 19:51:52浏览次数:10  
标签:10000 cout int sum cin long 牛客 102

题目链接:C - sum

题目描述:

示例说明:

解:

这题典型的贪心问题,是求最小的操作次数。首先我们可以先算出这n个数的和s,s和sum的大小有三种情况。当s = sum时,一个数字也不用修改,答案为0。而剩下的两种情况可以合为一种情况来做。首先我们要知道如果把这n个数都变为相反数, 则s也会变为s的相反数,当把sum也变为sum的相反数时,所需的次数是一样的。(因为题目中修改后的某个数的值x是在[-10000,10000]之间,是对称的。)知道这接下来就好办了。

方法一:

以s > sum来做,要使s尽可能接近sum的值并且次数最少。可以先从这n个数最大的数开始,用s减去这个数然后再减去10000,比较 s和sum的关系,如果 s还是>sum 继续用当前的s减去第二大的这个数再减去10000。直到s <= sum时,则从头到尾经过的次数为最小次数。

code:

#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int N = 2e5 + 10;
int a[N];
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t;
	cin >> t;
	while( t -- ) {
		int n, sum, s = 0; 
		cin >> n >> sum;
		for(int i = 1; i <= n; i ++ ) {
			cin >> a[i];
			s += a[i];
		}
		if(s == sum) { //s = sum时 则不需要修改次数 
			cout << "0" << endl;
			continue; 
		}
		if( s < sum) { // s < sum时 全部取反则可变为 s > sum  
			for(int i = 1; i <= n; i ++) a[i] = -a[i];
			s = -s; sum = -sum;
		}
		sort(a + 1, a + 1 + n);
		
		//能进入此循环的 表明此时 s > sum 
		for(int i = n; i >= 1; i -- ) { //s > sum 要使s更加的接近sum 首先从最大的那个修改 
			s = s - a[i] - 10000;
			if(s <= sum ) {
				cout << n - i + 1 << endl; 
				break;
			} 
		}
		
	}
	return 0;
}

方法二:

以 s < sum来做,和上面的思想是一样的,话不多说 直接上code。

#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int N = 2e5 + 10;
int a[N];
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t;
	cin >> t;
	while( t -- ) {
		int n, sum, s = 0;
		cin >> n >> sum;
		for(int i = 1; i <= n; i ++ ) {
			cin >> a[i];
			s += a[i];
		}
		if(s == sum) { //s = sum时 则不需要修改次数 
			cout << "0" << endl;
			continue; 
		}
		if( s > sum) { // s > sum时 全部取反则可变为 s < sum  
			for(int i = 1; i <= n; i ++) a[i] = -a[i];
			s = -s; sum = -sum;
		}
		sort(a + 1, a + 1 + n);
		
		//能进入此循环的 表明此时 s < sum 
		for(int i = 1; i <= n; i ++ ) { //s < sum 要使s更加的接近sum 首先从最小的那个修改 
			s = s - a[i] + 10000;
			if(s >= sum ) { 
				cout << i << endl; 
				break;
			} 
		}
		
	}
	return 0;
}

GAME OVER!

END!

标签:10000,cout,int,sum,cin,long,牛客,102
From: https://blog.csdn.net/Jeraphael/article/details/142939642

相关文章

  • 闯关leetcode——112. Path Sum
    大纲题目地址内容解题代码地址题目地址https://github.com/f304646673/leetcode/tree/main/112-Path-Sum内容GiventherootofabinarytreeandanintegertargetSum,returntrueifthetreehasaroot-to-leafpathsuchthataddingupallthevalues......
  • 每日OJ题_牛客_非对称之美_最长非回文字符串_C++_Java
    目录牛客_非对称之美_最长非回文字符串题目解析C++代码Java代码牛客_非对称之美_最长非回文字符串非对称之美(nowcoder.com)题目解析找到规律就是最长非回文字符串(判断是否全同->0,否则是n-1(回文减去1)或n)。C++代码#include<iostream>usingnamespacestd;int......
  • 每日OJ题_牛客_连续子数组最大和_线性dp_C++_Java
    目录牛客_连续子数组最大和_线性dp题目解析C++代码Java代码牛客_连续子数组最大和_线性dp连续子数组最大和_牛客题霸_牛客网(nowcoder.com)描述:        给定一个长度为 n的数组,数组中的数为整数。请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,......
  • 牛客周赛63(C++实现)
    ......
  • uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视
    uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频......
  • P1020 [NOIP1999 提高组] 导弹拦截
    题意:求出一个最长单调不增子序列和最少的个数的单调不加的子序列的个数。根据dilworth:最少的全集个数等于最大的反链的元素个数。可以将求最少的个数的单调不加的子序列的个数转化为求最长上升子序列的长度。于是用二分+贪心来写点击查看代码#include<iostream>#include......
  • 10/16 牛客
    第一道题这是我第一次做bfs广度搜索的题简单了解了一下广度优先搜索的概念就是从一个点开始寻找邻居节点然后再从邻居节点开始找未被访问过的邻居节点,最后都被访问了且是最短路径算法我看视频里是利用队列实现的利用队列先进先出的性质确保对头的点出去以后是剩下的邻居......
  • 每日OJ题_牛客_礼物的最大价值_路径dp_C++_Java
    目录牛客_礼物的最大价值_路径dp题目解析C++代码Java代码牛客_礼物的最大价值_路径dp礼物的最大价值_牛客题霸_牛客网(nowcoder.com)描述:        在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子......
  • Subsequence and Prefix Sum
    SubsequenceandPrefixSum\(n\)才\(100\),\(a_i\)才\(20\),显然DP。设\(f_{i,j}\)表示第\(i\)个数,前\(i\)个数前缀和为\(j\)的方案数。显然,\(f_{0,0}=1\)。留意到如果\(j=0\),那么加入和不加入第\(i\)个数,最终的答案序列是一样的,因此此时加入第\(i\)个数对答......
  • Natasha, Sasha and the Prefix Sums
    Natasha,SashaandthePrefixSums设\(g(x)\)表示\(f(a)=x\)的个数,那么\(ans=\sum_{x=\max(0,n-m)}^{n}xg_x\)。恰好不好求,我们求\(h(x)\)表示\(f(a)\lex\)的个数,\(g(x)=h(x)-h(x-1)\)。1表示向上走,-1表示向下走,\(h_i\)就是求从\((0,0)\)走到\((n+m,n-m)\)......