比赛链接
A题 求最初要携带的最少能量,其实可以假设最初为0,走一遍全过程,其中的最小负数的相反数即答案。
A题代码
#include
#include
using namespace std;
int main()
{
int n;
int i;
int maxx=0;
cin>>n;
for(i=0;
i>x;
maxx=max(maxx,x+i);
}
cout<
B题 给你一段序列,让你把这个序列按原顺序拆分成两个序列,两个序列必须完全相同。问是否可行
本题为51nod1400原题 链接
由于数据范围只有50,所以只要dfs+剪枝就好了。
用两个变量l,r表示两个数组分别进行到什么位置,当前元素没出现过时,一定要加到第一个数组,如果出现过就有两种选择,要么加到第一个,要么加到第二个,当搜到最后一个元素而且 l = r l=r l=r时,代表搜索成功。
B题代码
#include
#include
#include
#include
using namespace std;
const int maxn = 55;
int a[maxn];
int q[maxn];
int flag;
int n;
void dfs(int u,int l,int r)
{
if(flag==1)
return ;
if(u==n+1)
{
if(l==r) flag=1;
return ;
}
if(l==r)
{
q[r]=a[u];
dfs(u+1,l,r+1);
}
else
{
if(a[u]==q[l])
{
q[r]=a[u];
dfs(u+1,l,r+1);
dfs(u+1,l+1,r);
}
else
{
q[r]=a[u];
dfs(u+1,l,r+1);
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
flag=0;
memset(q,0,sizeof(q));
scanf("%d",&n);
for(int i=1;
i<=n;
++i)
{
scanf("%d",&a[i]);
}
dfs(1,0,0);
if(flag) printf("Frederica Bernkastel\n");
else printf("Furude Rika\n");
}
return 0;
}
D题 给你三种图的类型,求给定图是哪一种类型,按照题找出没种图不同的特性,例如每个点的度,每种度的点的个数。
D题代码
#include
#include
#include
#include
using namespace std;
const int maxn = 505;
int d[maxn];
int cnt[5];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;
i<=m;
i++)
{
int x,y;
scanf("%d%d",&x,&y);
d[x]++;
d[y]++;
}
for(int i=1;
i<=n;
i++)
{
if(d[i]<=4)
cnt[d[i]]++;
}
//cout<
E题 给你一个长度为n的数组,最多删除k个元素,求最长相同连续子序列。
0 < = k < = n < = 1 ? 1 0 5 1 < = a [ i ] < = 1 ? 1 0 9 0< =k< =n< =1*10^{5} \quad \quad 1< =a[i]< =1*10^{9} 0<=k<=n<=1?1051<=a[i]<=1?109
本题由于数据范围是1e5,所以肯定是 n l o g n nlogn nlogn的做法,考虑到最长相同子序列肯定是同一种元素构成的,所以我们可以对每个元素检验可构成的最长连续子序列。我们可以枚举右端点,然后二分左端点,如果删除k个点能达到长度为 l l l,删除k个点肯定能达到 l ′ < l l' < l l′
E题代码
#include
#include
#include
#include
#include
推荐阅读
- 前后缀和|牛客小白月赛5 I.区间 (interval)
- 牛客多校第一场 A-Equivalent Prefixes
- 牛客练习赛67-C、牛牛爱博弈
- 贝伦卡斯泰露
- 剑指offer|剑指offer、牛客-二维数组的查找
- 牛客|牛客-紫魔法师(仙人掌染色-判奇环)
- 字符串的处理|牛客练习赛67 A-牛牛爱字符串(字符串小模拟)
- 比赛题解|牛客练习赛 51 (DEF题解)
- 牛客练习赛67-B、牛牛爱位运算