csust2020新生赛热身赛题解

   日期:2020-12-19     浏览:91    评论:0    
核心提示:1.a+b#include<iostream>using namespace std;int main(){ int t;cin>>t; while(t--){ int a,b; cin>>a>>b; cout<<a+b<<endl; } return 0;}2.Psycho-Pass#include <bits/stdc++.h>using na

1.a+b

#include<iostream>
using namespace std;
int main(){ 
  	int t;cin>>t;
  	while(t--){ 
      int a,b;
      cin>>a>>b;
      cout<<a+b<<endl;
    }
  	return 0;
}

2.Psycho-Pass

#include <bits/stdc++.h>
using namespace std;

const int mac=1e5+10;

char s[mac];

int main()
{ 
    int nb=0;
    scanf ("%s",s);
    int len=strlen(s);
    for (int i=0; i<len; i++)
        if (s[i]=='1') nb++;
    printf ("%d\n",nb);
    return 0;
}

3.括号匹配
这个就是个简单的栈的理解运用,用sum记录一个数据,在遇到’(‘则加一,遇到’)’则减一,在从前往后扫描的过程中,sum始终不为负数,并且扫描完成后sum等于0输出YES即可。

#include <bits/stdc++.h>
using namespace std;

const int mac=1e5+10;

char s[mac];

int main()
{ 
    int n;
    scanf ("%d",&n);
    scanf ("%s",s+1);
    int sum=0;
    for (int i=1; i<=n; i++){ 
        if (s[i]=='(') sum++;
        else sum--;
        if (sum<0) { 
            printf ("NO\n");
            return 0;
        }
    }
    if (sum>0) printf ("NO\n");
    else printf ("YES\n");
    return 0;
}

4.jcc爱踢球
由于每轮都是偶数只队伍,那么这就相当于一颗满二叉树了,我们经常看电视的时候每次比赛都基本会出现树状图。

我们每次只记录叶节点的编号(假设为i),那么下一次的新叶节点编号(即旧叶节点的父亲)为(i+1)/2如图所示:

那么他们相遇也就是父节点相同的时候,而每找一次父节点计数器加一,则最后的计数器的值(记为S)就是树的深度-1,也是比赛是场数,最后如果2S为总的队伍数,则说明决赛相遇。

#include <bits/stdc++.h>
using namespace std;

int pow(int a,int s)
{ 
    int ans=1;
    for (int i=1; i<=s; i++)
        ans*=a;
    return ans;
}

int main()
{ 
    int n,a,b;
    scanf ("%d%d%d",&n,&a,&b);
    int s=0;
    while (a!=b){ 
        a=(a+1)/2;
        b=(b+1)/2;
        s++;
    }
    if (n-pow(2,s)==0) printf ("Final!\n");
    else printf ("%d\n",s);
    return 0;
}

5.食堂打饭
用两个双指针维护一下区间和就行

#include <bits/stdc++.h>
#define pb push_back
#define m_p make_pair
#define pii pair<int, int>
#define fi first
#define se second
typedef long long ll;
using namespace std;
int n,m;
const int maxn = 2e5+100;
int a[maxn];
int main()
{ 
    int t;
    scanf("%d",&t);
    while(t--)
    { 
        scanf("%d%d",&n,&m);
        int tmp = 0,res = 0;
        for(int i = 1;i<=n;i++)
        { 
            scanf("%d",a+i);
            if(i<=m) tmp+=a[i];
        }
        res = tmp;
        for(int i = m+1;i<=n;i++)
        { 
            tmp+=a[i];
            tmp-=a[i-m];
            res = max(tmp,res);
        }
        printf("%d\n",res);

    }
    return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服