Codeforces Round #775 (Div. 2)

news/2024/11/24 2:06:55/

A. Game

题意:

有n块相邻的土地,只有1可以走,0就不能走,你有一次超级跳的机会,每次多跳一格就会多消耗一金币,求最少的花费。

思路:

注意只能跳一次,然后必须要能够达到终点,那么从头和尾分别找第一个出现的0,然后算一下差距即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{int n,i,j,t,d1;cin>>t;while(t--){int flag1=0,flag2=0;cin>>n;vector<int >a;for(i=1;i<=n;i++) {cin>>j;a.push_back(j);}for(i=0;i<n;i++){if(a[i]==0){flag1=i+1;break;}}if(flag1==0){cout<<0<<endl;continue;}for(i=n-1;i>=0;i--){if(a[i]==0){flag2=i+2;break;}}cout<<flag2+1-flag1<<endl;}return 0;
}

B. Game of Ball Passing

题意:

知道每个球员的传球次数,求最少要几个球能完成每个人的传球要求

思路:

不难想到应该是答案应该是取决于需要传球次数最多的人,然后如果最多传球次数的两倍小于等于传球总数,那么只需要一个球就行了,例如1,2,3,3,总数8,但是最大的次数才3次,那么他们肯定可以两两传完,否则就输出他们的差即可。

#include<bits/stdc++.h>using namespace std;#define int long long
const int maxn=1e5+100;
long long  a[maxn];
signed  main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);long long  n,i,j,t;cin>>t;while(t--){cin>>n;long long l=0,r=0;for(i=0;i<n;i++){cin>>a[i];r+=a[i];l=max(l,a[i]);}if(l==0){cout<<0<<endl;}else if(l*2<=r){cout<<1<<endl;}else {cout<<l-(r-l)<<endl;}}return 0;
}
/*
10
4
999999999 999999999 9999999999 1
*/

C. Weird Sum

题意:

给你一个矩阵,每个位置都填上一个数,然后求相同数的任意两点之间的曼哈顿距离之和是多少?

思路:

首先要从曼哈顿距离去考虑这题,曼哈顿距离简单来说就是两个点之间的横坐标差+纵坐标差的和,接下来就去思考,如果都填一个数,怎么快速的算出来他们任意两个点之间的差距呢?

这里假设他们相同的数字有五个,他们横坐标分别是1,3,5,7

那么考虑他们每个点对答案的贡献就如下:

对于i点,能造成答案贡献的有a-b,a表示终点,b表示起点,3-1代表1到3需要2
1:(3-1)(5-1)(7-1)
3:(5-3)(7-3)
5:(7-5)

7:

再把加法和减法分开来看,就可以发现按顺序排列之后会有规律:

加法:+7*3+5*2+3*1
减法:-1*3-3*2-5*1

再把式子一提取一下,那么对于每个点a[i],对答案的贡献就是i*a[i]-(n-i)*a[i]

#include<bits/stdc++.h>using namespace std;const int maxn=1e5+100;
#define int long long 
signed main()
{int n,m,i,j,d1;map<int ,vector<int > >x,y;cin>>n>>m;for(i=1;i<=n;i++){for(j=1;j<=m;j++){cin>>d1;x[d1].push_back(i);y[d1].push_back(j);}}long long ans=0,c=0;for(auto &[a,b]:x){int c=0;sort(b.begin(),b.end());for(auto c1:b){ans+=c1*c;c++;ans-=c1*(b.size()-c);}}for(auto &[a,b]:y){int c=0;sort(b.begin(),b.end());for(auto c1:b){ans+=c1*c;c++;ans-=c1*(b.size()-c);}}cout<<ans<<endl;return 0;
}


http://www.ppmy.cn/news/361607.html

相关文章

Codeforces Round #775 (Div. 2,based on Moscow Open Olympiad in Informatics) - D. Integral Array - 题解

目录 Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)-D. Integral ArrayProblem DescriptionInputOutputSample InputSample OnputNote 题目大意解题思路AC代码 Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics…

linux 权限 775 777 区别

读取权限 r 4 写入权限 w 2 执行权限 x 1 775 这三个数字代表拥有者&#xff0c;组用户&#xff0c;其他用户的权限。 例如&#xff1a; 7 拥有者有 读取&#xff0c;写入&#xff0c;执行权限 7 组用户有 读取&#xff0c;写入&#xff0c;执行权限 5 其他用户有 读…

力扣(LeetCode)775. 全局倒置与局部倒置(C++)

模拟 理解题&#xff0c;全局倒置就是不相邻的逆序对&#xff0c;局部倒置就是相邻的逆序对。提示中给出&#xff0c; 0 < n u m s [ i ] < n 0 < nums[i] < n 0<nums[i]<n &#xff0c;其中 n n u m s . l e n g t h n nums.length nnums.length , n…

每日一题 —— LC. 775 全局倒置与局部倒置

775. 全局倒置与局部倒置 给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < nnums[i] > nums[j] 局部倒置 的数目等于满足…

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics(补)

A .因为只能跳一次 如果没有0 就输出0 否则就输出第一个0到最后一个0 的l-r2 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back const int INF0x3f3f3f3f; const int N2e510,M1e610; int a[N],mp[M]{0}; void solve(){int n;ci…

Codeforces Round #775 - F. Serious Business

F. Serious Business prob. &#xff1a;有 3 n 3\times n 3n个格子&#xff0c;每个格子有一个权值&#xff0c;你要从左上走到右下&#xff0c;每一步只能往右或往下走&#xff0c;刚开始的时候第二行是封锁的状态&#xff0c;你有一些可选的操作去解锁第二行从 [ L i , R …

Codeforces Round #775 CF1649 ABCD

1649A - Game(英语题) 不能走0&#xff0c;最小跳跃长度 题目描述很微妙&#xff0c;注意只能跳一次&#xff01;我开始以为是遇到连续 0 0 0才跳&#xff0c;后来感谢EM-LGH大神&#xff0c;才让我悟到了正确题意。 1649B - Game of Ball Passing(贪心) 传球游戏&#xff0c;…

Codeforces Round #775 (Div. 2) E.Tyler and Strings

Problem - E - Codeforces 题意&#xff1a;给你两个数组s、t&#xff0c;让你重新排列s的数&#xff0c;问有多少种排列使得s的字典序严格小于t。s&#xff0c;t的长度和数组内的数开到2e5。 首先先得知道多重集的排列数&#xff1a; 一个由c1个a1&#xff0c;c2个a2……ck…