ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

codeforce div2 #775

2022-03-08 09:00:07  阅读:196  来源: 互联网

标签:775 传球 ma int cin a1 codeforce include div2


1/A题:

 https://codeforces.com/contest/1649/problem/A

这一题其实很简单,就是要求最左边和最右边的最小距离(只能跨一次水,no more than once!!!)

#include <iostream>
#include <cstring>
using namespace std;
const int N = 1110;
int q[N];
int t, n;
int main()
{
    cin >> t;
    while(t--) {
        cin >> n;
        for(int i = 1; i <= n; i++) cin >> q[i];
        int l = 1, r = n;
        while(q[l] == 1) l++;
        l--;
        while(q[r] == 1) r--;
        r++;;
        if(l > r) cout << 0 << endl;
        else cout << r-l << endl;
    }
    return 0;
}

2/B题:

https://codeforces.com/contest/1649/problem/B

这题:我们要把所有人传球的次数按升序排列,找到传球次数最大的an。我们假设传球次数总和为sum。如果an>=sum-an, 说明了出了an以为的所有人的传球次数加起来都不够an的传球次数,我们可以把除了an以外的所有人都当作同一个人,假设为a1,那么会有这样的结果:

an传球的次数为an,那么a1接球的次数也就为an,再减去a1自己传球给an的次数,就剩下了 an-a1,因为最后一个接球的人不需要再传球,所以如果an大于a1的话,就会有an-a1条路线。

如果an<=a1 那么只需要一个球就行了。 当然如果所有人传球的次数之和为0,那么就是0个球了。

#include <iostream>
using namespace std;
typedef long long LL;
const int N = 100010;
int q[N];
int t;
int main() {
    cin >> t;
    while(t--) {
        int n;
        cin >> n;
        LL sum = 0;
        int ma = -1;
        for(int i = 0; i < n; i++) {
            cin >> q[i];
            ma = max(q[i], ma);
            sum += q[i];
        }
        if(sum == 0) {
            cout << 0 << endl;
            continue;
        }
        if(ma <= sum - ma) cout << 1 << endl;
        else {
            cout << 2*ma - sum << endl;
        }
    }
    return 0;
}

3/C题:

https://codeforces.com/contest/1649/problem/C

这题是求同一种数字的所有曼哈顿距离,不过在学会此题解法的同时,我也学会了一种累加一组数字两两之间差值之和的方法(不过要先排序);

根据大佬的思路:我们先把不同颜色的点的x,y左边分别存起来,然后再计算x轴距离之和的和,再计算y轴距离之差的和,然后加起来就是答案了。

这里我用的是map+vector,感觉要经常使用STL,会节省很多时间,和提供很多奇妙的方法。

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
#define int long long
int n, m, ma;
signed main(){
    map<int,vector<int> >mx, my;
    cin >> n >> m;
    for(int i=1;i<=n;i++){
        for(int j=1;j <= m;j++){
            int x;cin>>x;
            mx[x].pb(i);
            my[x].pb(j);
            ma=max(ma,x);
        }
    }
    int ans = 0;
    for(int i=1;i<=ma;i++) {
        int cnt=0,tot=0;
        vector<int>s=mx[i];
        sort(s.begin(), s.end());
        for(auto t:s){
            ans+=cnt*t+tot;
            tot-=t,cnt++;
        }
    }
    for(int i=1;i<=ma;i++){
        int cnt=0,tot=0;
        vector<int>s=my[i];
        sort(s.begin(), s.end());
        for(auto t:s){
            ans+=cnt*t+tot;
            tot-=t,cnt++;
        }
    }
    printf("%lld\n",ans);
    return 0;
    

 

标签:775,传球,ma,int,cin,a1,codeforce,include,div2
来源: https://www.cnblogs.com/MoonSkyy/p/15979016.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有