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;
}