首页 > 其他分享 >牛客小白月赛96(待补思路和F)

牛客小白月赛96(待补思路和F)

时间:2024-06-14 22:32:35浏览次数:11  
标签:待补 ll long 牛客 int count1 count0 sum 96

比赛链接:牛客小白月赛96


赛时感受

       赛时在前面卡的时间有点长,C题没开longlong wa了n发,D题没考虑负数又wa了n发,然后来写E的时候时间就不长了,匆忙写一次交一发。


A

思路

       

题解

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
#define ll long long

int n;

int main() {
  string s1, s2;
  cin >> s1 >> s2;
  int len1 = s1.length(), len2 = s2.length();
  if (len1 == 6 || len2 == 6)
    cout << -1 << endl;
  else
    cout << abs(len1 - len2) + 1 << endl;
  
  return 0;
}

 


B

思路

       

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
#define ll long long

int n;

int main() {
  cin >> n;
  string s;
  cin >> s;

  int len = s.length(), count1 = 0, count0 = 0;
  for (int i = 0; i < len; i++) {
    if (s[i] == '0')
      count0++;
    else
      count1++;
  }

  if (count0 == count1) {
    if (len == 2) {
      cout << -1 << endl;
    } else {
      cout << 2 << endl;
    }
  } else if (n != 1 && count1 && count0) {
    cout << 1 << endl;
  } else {
    cout << 0 << endl;
  }

  return 0;
}

 


C

思路

       

题解

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
#define ll long long

ll n;
ll p[N], sum[N];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> p[i];
    sum[i] = sum[i - 1] + p[i];
  }

  ll ans = 0;
  for (int j = n; j >= 1; j--) {
    ll l = 0, r = j - 1, mid, res = 0, a3 = sum[n] - sum[j - 1];
    if (a3 > sum[j - 1]) break;
    while (l <= r) {
      mid = (l + r) >> 1;
      ll a2 = sum[j - 1] - sum[mid];
      if (a2 > sum[mid] && a2 > a3) {
        res = mid;
        l = mid + 1;
      } else {
        r = mid - 1;
      }
    }
    if (res == 0) break;
    ans += res;
  }

  cout << ans << endl;
  
  return 0;
}

 


D

思路

       。

题解

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
#define ll long long

ll odd[N], even[N], count1, count0;
void solve() {
  ll n, a, b, sum0 = 0, sum1 = 0;
  count1 = count0 = 0;
  cin >> n >> a >> b;
  for (int i = 1; i <= n; i++) {
    ll x;
    cin >> x;
    if (x % 2)
      count1++;
    else
      count0++;
  }

  ll num = ((count1 - 1) * count1 / 2 + (count0 - 1) * count0 / 2);
  if (count1 == 0 || count0 == 0) {
    // 都是奇数或者偶数
    if (a < 0) {
      cout << a * num << endl;
    } else {
      cout << a * (n - 1) << endl;
    }
  } else if (a < 0 && b < 0) {
    // 若a和b都小于0,则加上可以为结果做贡献
    cout << a * num + (n * (n - 1) / 2 - num) * b << endl;
  } else if (a > b) {
    // 若
    if (b < 0) {
      cout << (n * (n - 1) / 2 - num) * b << endl;
    } else {
      cout << b * (n - 1) << endl;
    }
  } else {
    if (a < 0) {
      cout << a * num + b << endl;
    } else {
      cout << a * (n - 2) + b << endl;
    }
  }
  return;
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    solve();
  }
  
  return 0;
}

 


E

思路

       

题解

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
#define ll long long

// be数组计算当前节点及其子树的权值和,af数组计算当前节点及其所有祖先节点的权值和,ans计算原树中有多少稳定点
ll n, a[N], fa[N], before_value[N], after_value[N], ans, after_num[N], before_num[N];
bool flag[N];
vector<int>edge[N];
// 计算原树中稳定点的个数和标记原树中是稳定点的节点
void dfs(int x) {
  if (after_value[x] <= a[x] * 2 && a[x] * 2 <= before_value[x])
    after_num[x]++, flag[x] = true;
  ll len = edge[x].size();
  for (int i = 0; i < len; i++) {
    dfs(edge[x][i]);
    after_num[x] += after_num[edge[x][i]];
  }
}

void dfs1(int x) {
  before_num[x] += before_num[fa[x]] + flag[x];
  int len = edge[x].size();
  for (int i = 0; i < len; i++) {
    dfs1(edge[x][i]);
  }
}

int main() {
  cin >> n;
  ll res = 0;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    before_value[i] = after_value[i] = a[i];
  }
    
  for (int i = 1; i <= n; i++) {
    cin >> fa[i];
    edge[fa[i]].push_back(i);
    before_value[i] += before_value[fa[i]];
  }

  for (int i = n; i; i--) {
    after_value[fa[i]] += after_value[i];
  }

  // 枚举删边,计算原树的稳定点个数
  ans = 0;
  dfs(1);
  dfs1(1);
  res = max(res, after_num[1]);
  ll mark = after_num[1];

  for (int i = 2; i <= n; i++) {
    ans = mark - after_num[i] - before_num[fa[i]];
    // 修改当前节点的祖先节点为下标的af数组的权值和,并判断当前节点在删边之后是否是稳定点
    for (int j = fa[i]; j; j = fa[j]) {
      if (after_value[j] - after_value[i] <= a[j] * 2 &&
          a[j] * 2 <= before_value[j]) {
        ans++;
      } else {
        break;
      }
    }
    res = max(res, ans);
  }
  cout << res << endl;
  
  return 0;
}

 


F

思路

       

题解


标签:待补,ll,long,牛客,int,count1,count0,sum,96
From: https://www.cnblogs.com/againss/p/18248768

相关文章

  • 代码随想录算法训练营第第37天 | 56. 合并区间 、738.单调递增的数字、968.监控二叉
    合并区间本题也是重叠区间问题,如果昨天三道都吸收的话,本题就容易理解了。https://programmercarl.com/0056.合并区间.html能做出来/***@param{number[][]}intervals*@return{number[][]}*/varmerge=function(intervals){intervals.sort((a,b)=>{......
  • 牛客周赛46(思路待补)
    比赛链接:牛客周赛46赛时感受    本场参加的是内测,多亏了内测群的佬提供的思路,得以AK。    ABC都是简单的签到题,D稍微需要分类一下,EF有点算法知识,E可以使用前缀和+二分搜索过掉,但是听说好像还能使用离散化树状数组等等,F是数学知识,隔板法和求质数、求组合。 ......
  • 医院设备管理系统的设计与实现 毕业设计-附源码39673
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,医院当然也不能排除在外。医院设备管理系统是以实际运用为开发背景,运用软件工程开发方法,采用SSM技术构建的一个管理系统。整个开发过程首先对软件系统进行......
  • 二叉搜索树(待补充)
    二叉搜索树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左,右子树也分别为二叉搜索树;没有键值相等的节点。用Java来表示二叉树p......
  • 【异常】使用Dbeaver链接TDengine提示SQL错误[9684]:ERROR (2318): Connection reset
    一、异常内容使用Dbeaver链接TDengine提示SQL错误[9684]:ERROR(2318):Connectionreset,报错截图如下二、报错说明“ERROR(2318):Connectionreset”表示客户端与服务器之间的连接被意外地重置。这通常发生在一个应用程序试图读取或写入数据,但是连接的另一端已经关......
  • 牛客周赛Ronud 46
    比赛链接A乐奈吃冰思路:我感觉这题才是最难的,可恶,wa了好几次,型号是OI赛制模拟,假设有x份冰,y份热,我们能吃min(x/2,y)份热,但我们可以吃完所有点冰Code:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineall(x)x.begin()+1,x.end()#definePIIp......
  • 线程池(待补齐)
    #include<stdio.h>#include<stdbool.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<strings.h>#include<errno.h>#include<pthread.h>#defineMAX_WAITING_TASKS1000//处于等待状态的线程数量......
  • 牛客周赛 Round 46 题解 C++
    目录 A 乐奈吃冰B 素世喝茶C 爱音开灯D 小灯做题E 立希喂猫F 祥子拆团 A 乐奈吃冰#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<vector>#include<unordered_map>......
  • 牛客热题:矩阵的最小路径和
    ......
  • springboot高校运动会信息管理系统设计与实现-计算机毕业设计源码92968
    摘 要本论文介绍了一个高校运动会信息管理系统的设计和实现过程。首先是高校运动会的需求分析和可行性分析,通过比较运动会的各个工作流程,确定了系统的数据流程和数据库结构,然后介绍了高校运动会信息管理系统开发所使用的软件开发工具,最后描述了系统的详细设计与实现。本系统......