Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)A~C 题解(原来如此简单,超级详细入门必备)

news/2024/11/24 3:43:17/

A. Game

题目传送门

题目理解:一个人要过河,这个人不会游泳,只能走陆地,一旦碰水就死翘翘,但是现在给你一个bug,只要你给x个硬币,你就可以传送到i+x块陆地上面,比如你在第5块土地上面,给5个硬币,那么你会出现在第10块土地上面。第一块和最后一块土地必然存在,求最少花硬币的数量。

解题思路:不能碰水,第一块和最后一块总是存在,那就从头到尾和从尾到头开始分别遍历,最后处理这两个变量就好

关键代码:

l=1;r=n;
while(a[l]==1&&l<=n)l++;
while(a[r]==1&&r>=1)r--;

最后a[l]==0,a[r]==0。

源代码:

//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<string.h>
#include<stdio.h>
#include<deque>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<set>
#define int long long
#define endl '\n'
#define rg register int
#define fe(i,a,b) for(i = a ; i <= b ; ++ i)
#define de(i,a,b) for(i = a ; i >= b ; -- i)
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(x) (x).begin(),(x).end()
#define sz size()
#define ce cout<<endl
//#define jian1 std::ios::sync_with_stdio(false)
//#define jian2 cin.tie(0)
//#define jian3 cout.tie(0)
using namespace std;
int a[10000005];
signed main()
{//要开全局变量记得删除变量int i,j,t;int da1,da2,n,m,k,l,r,sum,ans;
//	jian1;jian2;jian3;cin>>t;while(t--){cin>>n;ans=0;fe(i,1,n){cin>>a[i];}l=1;r=n;while(a[l]==1&&l<=n)l++;while(a[r]==1&&r>=1)r--;ans=r-l+2;if(ans<0)ans=0;cout<<ans<<endl;}return 0;
}

B. Game of Ball Passing

题目传送门

题目理解:n个人相互传球,每个人有一定的传球数,然后你去安排怎么去传球,使得这些活泼可爱的小孩子用的球最少。

解题思路:我们发现如果2个以上的人的传球数是一样的时候,那么我们只会用一颗球,比如1 2 3 4 4,我们先让4号5号相互穿一次球,然后3号,4号,5号相互传一次球....最后1号,2号,3号,4号,5号相互传球。同样的我们发现就算你不可传球了,但是你其实还可以去接球,所以某人的传球数可以直接减一;

因此我们得到题解,只要将数据排序,只要前缀和大于a[n],那么就是一个球,不然就算a[n]-sum。

源代码:

//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<string.h>
#include<stdio.h>
#include<deque>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<set>
#define int long long
#define endl '\n'
#define rg register int
#define fe(i,a,b) for(i = a ; i <= b ; ++ i)
#define de(i,a,b) for(i = a ; i >= b ; -- i)
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(x) (x).begin(),(x).end()
#define sz size()
#define ce cout<<endl
//#define jian1 std::ios::sync_with_stdio(false)
//#define jian2 cin.tie(0)
//#define jian3 cout.tie(0)
using namespace std;
int a[10000005];
signed main()
{//要开全局变量记得删除变量int i,j,t;int da1,da2,n,m,k,l,r,sum,ans;
//	jian1;jian2;jian3;cin>>t;while(t--){cin>>n;fe(i,1,n)cin>>a[i];sort(a+1,a+1+n);if(a[n]==0){cout<<0<<endl;continue;}sum=0;m=0;fe(i,1,n-1){sum+=a[i];if(sum+1>=a[n]){m=1;break;}}if(m)cout<<1<<endl;else{cout<<a[n]-sum<<endl;}}return 0;
}

C. Weird Sum

题目传送门

题目理解:给你n x m的矩阵,然后让你求各个相同数的各个曼哈顿距离和。

解题思路:因为是曼哈顿距离所以我们直接拆开x和y算就好了,并且将数组排序,然后计算,每一段相邻距离对整个队伍的贡献

关键式子:

\sum_{i=2}^{n}x_{i}*x_{i-1}*(i-1)*(n-i+1)

注意这里的n是指当前数对应的n

源代码:

//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<string.h>
#include<stdio.h>
#include<deque>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<set>
#define int long long
#define endl '\n'
#define rg register int
#define fe(i,a,b) for(i = a ; i <= b ; ++ i)
#define de(i,a,b) for(i = a ; i >= b ; -- i)
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(x) (x).begin(),(x).end()
#define sz size()
#define ce cout<<endl
//#define jian1 std::ios::sync_with_stdio(false)
//#define jian2 cin.tie(0)
//#define jian3 cout.tie(0)
using namespace std;
int a[10000005];
int b[10000005];
const int maxn=1e5+5;
vector<int >hang[maxn];
vector<int >lie[maxn];
signed main()
{//要开全局变量记得删除变量int i,j,t;int da1,da2,n,m,k,l,r,sum,ans;
//	jian1;jian2;jian3;cin>>n>>m;sum=0;fe(i,1,n){fe(j,1,m){cin>>k;if(!b[k]){a[++sum]=k;b[k]=1;}hang[k].pb(i);lie[k].pb(j);}}ans=0;
//	cout<<sum<<endl;fe(i,1,sum){sort(hang[a[i]].begin(),hang[a[i]].end());sort(lie[a[i]].begin(),lie[a[i]].end());
//		cout<<"hang"<<endl;fe(j,1,hang[a[i]].size()-1){ans=ans+(hang[a[i]][j]-hang[a[i]][j-1])*j*(hang[a[i]].size()-j);}
//		cout<<"lie"<<endl;fe(j,1,lie[a[i]].size()-1){ans=ans+(lie[a[i]][j]-lie[a[i]][j-1])*j*(lie[a[i]].size()-j);}}cout<<ans<<endl;return 0;
}

作者还在持续更新中,敬请期待0.0~~~


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

相关文章

linux 775和777权限有什么区别

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

LeetCode 775. 全局倒置与局部倒置

775. 全局倒置与局部倒置 【归并排序】显然全局倒置就是求整体的逆序对&#xff0c;用归并排序的思想可以在O(nlogn)的复杂度下求出逆序对的个数。 class Solution {// 9:56 15int[] nums, tmp;int n;int global(int l, int r) {if (l r) return 0;int m (l r) >> 1;…

Codeforces Round #775 (Div. 2) ABCDE题解

A-Game 题目大意&#xff1a; 一条直线上有若干个点&#xff0c;每个点有两种情况&#xff1a; land 可以经过water 不能经过 每次只能移动一个距离&#xff0c;如果下一个是land&#xff0c;就可以到下一个land上&#xff0c;花费为0。 最多可以使用一次跳跃&#xff0c;从…

Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad in Informatics) B. Integral Array

Problem - B - Codeforces 翻译&#xff1a; 给定一个由&#x1d45b;个正整数组成的数组&#x1d44e;&#xff0c;这些正整数从1到&#x1d45b;编号。我们称数组为整数&#xff0c;如果这个数组中的任意两个不一定不同的数字&#x1d465;和&#x1d466;&#xff0c;&…

linux命令chmod命令设置权限的777,775,774

chmod是Linux下设置文件权限的命令&#xff0c;后面的数字表示不同用户或用户组的权限。 一般是三个数字&#xff1a; 第一个数字表示文件所有者的zhidao权限 第二个数字表示与文件所有者同属一个用户组的其他用户的权限 第三个版数字表示其它用户组的权限。 权限分为三种&…

Linux权限字符串755,775,777,ugoa 等分别代表什么含义?这些数字是如何得到的?

1.常用的linux文件权限&#xff1a; 444 -r--r--r-- 600 -rw------- 644 -rw-r--r-- 666 -rw-rw-rw- 700 -rwx------ 744 -rwxr--r-- 755 -rwxr-xr-x 777 -rwxrwxrwx注:使用ll命令查看文件/文件夹属性时候,一共有10列,第一个小格表示是文件夹或者连接等等 d表示文件夹,l表示连…

ansible的部署和命令模块

一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成&#xff0c;类似于saltstack和Puppet&#xff0c;但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 …

Maven创建Web项目

创建 Web 应用 通过使用 Maven 的 maven-archetype-webapp 模板可以创建一个简单的 Web 应用。 例如&#xff0c;在命令行窗口执行以下命令&#xff0c;Maven 会为我们创建一个 JavaWeb 应用。 mvn archetype:generate -DgroupIdnet.biancheng.www -DartifactIdmavenWeb -Darc…