第一次比赛,总共ac了两个题,卡在第三题搜索上了。。。遂赛后补题

A

题目描述

有 aa 个蛋挞,分给 bb 个人,使得每个人分得蛋挞数量一样且尽量多。这样会导致可能有一些蛋挞没被分走,导致浪费,于是牛牛准备回收这些蛋挞并一口吃下全部。牛牛想知道是自己吃的多还是分蛋挞的每个人吃得多?

如果牛牛吃得多,输出 "niuniu eats more than others",如果分蛋挞的每个人吃得多,输出 "niuniu eats less than others",如果一样多输出 "same"(均不含引号)。

输入描述:

一行两个正整数 a,b(1\le a,b\le 10^{16})a,b(1≤a,b≤10

16

)。

输出描述:

输出一行一个字符串,表示答案。

签到题,做除法然后与原数相减(取余)比较即可。

#include<bits/stdc++.h>
using namespace std;
long long a,b;
int main(){cin>>a>>b;long long chu=a/b;if(a-(chu*b)==chu){cout<<"same\n";}else{if(a-(chu*b)>chu){cout<<"niuniu eats more than others\n";}else{cout<<"niuniu eats less than others\n";}}return 0;
}

B

https://ac.nowcoder.com/acm/contest/52441/B

贪心题,可以显而易见猜出从小到大排序,然后从大到小隔一个用一次优惠劵是最优

#include<bits/stdc++.h>
using namespace std;
int n,a[1000006];bool cmp(int x,int y){return x<y;
}int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int j=0;long long ans=0;sort(a+1,a+1+n,cmp);for(int i=n;i>=1;i--){j++;if(j==1){ans+=a[i];}if(j==2){j=0;}}cout<<ans<<"\n";}

C https://ac.nowcoder.com/acm/contest/52441/C

开始直接写了个搜索,结果tle了。。。实际上直接求全排列再依次找最就行。。。搜索基础还是要加强啊

#include<bits/stdc++.h>
using namespace std;
long long n,t,p;
long long ti[10],si[10],ci[10],bi[10];
int a[10];
int vis[10];
long long ans=0;void sol(){long long time=0;long long tt=0;for(int i=1;i<=n;i++){//    cout<<a[i]<<" ";time+=ti[a[i]];if(time>t)break;tt+=max(si[a[i]]-time*bi[a[i]],ci[a[i]]);}
//    cout<<"\n";ans=max(tt,ans);
}void dfs(int num){if(num>n){sol();return;    }for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=1;    a[num]=i;dfs(num+1);vis[i]=0;a[num]=0;    }}
}int main(){cin>>n>>t>>p;for(int i=1;i<=n;i++){int a,b,c,x,y;cin>>a>>b>>c>>x>>y;ti[i]=x;si[i]=a-p*y;bi[i]=b;ci[i]=c;}dfs(1);cout<<ans<<"\n";return 0;
}

d https://ac.nowcoder.com/acm/contest/52441/D

题解视频里讲的是二分。。。但是直接贪心应该就行。开始kruskal算法求最小生成树,然后把这个树的边从大到小排序,策略上可以显而易见看出,优先修最大的(因为这时乘的i最小),可以充分利用牛牛的钱,所以依次由大到小找直到发现钱超了,就得到了边界p

注意这个题数据范围有longlong,如果两个int相乘,最后范围大于int的就会崩,long long+=int*int这种就会错误,掉到这个坑里了,long*int则不会

#include<bits/stdc++.h>
using namespace std;
int n,m;
long long c;
int cnt;
struct edge{int to1,to2;long long dis;
};
edge e[200002];int ed[200002];bool cmp(edge a,edge b){return a.dis<b.dis;
}
bool cmp2(int a,int b){return a>b;
}int pre[40003];int find(int a){if(pre[a]==a){return a;}else{pre[a]=find(pre[a]);return pre[a];}
}void merge(int a,int b){int x=find(a);int y=find(b);if(x==y)return;elsepre[x]=y;}int main(){cin>>n>>m>>c;for(int i=1;i<=m;i++){int xi,yi,di;scanf("%d%d%d",&xi,&yi,&di);e[i].to1=xi;e[i].to2=yi;e[i].dis=di;}for(int i=1;i<=n;i++){pre[i]=i;}sort(e+1,e+1+m,cmp);int bian=0;for(int i=1;i<=m;i++){if(find(e[i].to1)!=find(e[i].to2)){merge(e[i].to1,e[i].to2);bian++;ed[bian]=e[i].dis;if(bian==n-1)break;}}sort(ed+1,ed+1+n-1,cmp2);long long tt=0;int f=0;for(long long i=1;i<=bian;i++){tt+=i*ed[i];//坑//cout<<ed[i]<<" ";if(tt>c){f=1;cout<<ed[i]<<"\n";break;}}if(f==0)cout<<0<<"\n";return 0;
}

e/fhttps://ac.nowcoder.com/acm/contest/52441/F 题面一样就是数据范围不一样

e题数据小,直接暴力枚举就行,

f题需要优化一下,用桶的思想(不好描述,很精妙,看代码),枚举每一个顶点,对每一个顶点枚举每一条边,用桶标记距离,最后去掉直线即可。

注意,整数点是无法产生等边三角形的,所以本题不用管

另外由于有负数坐标,要转化为正的,但是至少要加整个范围长度(1000)以上否则去直线的时候对称一下,对称点会为负导致越界

#include<bits/stdc++.h>
using namespace std;
int zb[3000002];
int vis[3002][3002];
int n;
int ans,line;
struct point{int x,y;
};
point p[3002];int dis(point a,point b){return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&p[i].x);scanf("%d",&p[i].y);vis[p[i].x+1100][p[i].y+1100]++;}ans=0;line=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j)continue;ans+=zb[dis(p[i],p[j])];zb[dis(p[i],p[j])]++;if(vis[2*p[i].x-p[j].x+1100][2*p[i].y-p[j].y+1100])line++;}for(int k=1;k<=n;k++){if(i==k)continue;zb[dis(p[i],p[k])]=0;}}cout<<ans-line/2<<"\n";return 0;
}

总结:还得练基础,熟练度,思想!我太菜了

[菜鸡的解题报告]牛客小白月赛69 2023.3.24相关推荐

  1. 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】

    比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大.

  2. 牛客小白月赛62 幼稚园的树

    2022.11.25 今晚闲来无事,在zhoj群中看到管理员发布的牛客小白月赛的通知,就和舍友一起参加了. 题目描述 来源:牛客网 牛牛在幼稚园做义工,幼稚园中共有 n n n 颗树,第 1 天中午时 ...

  3. 牛客小白月赛16 小石的签到题(博弈)

    牛客小白月赛16 小石的签到题 链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 题目描述 输入描述: 共一行,输入一个数 nnn . 输出描述: ...

  4. F.孤独(牛客小白月赛39)

    F.孤独(牛客小白月赛39) 题意: 给定一棵树,寻找一个路径,将断掉所有与这个路径上的点相连的边,使得剩下的最大连通块的大小最小 题解: 这题有点印象,感觉做过,至少这个方法肯定遇到过 设dp[u] ...

  5. 牛客小白月赛58 B(暴力)C(思维)D(dp滚动数组优化)

    牛客小白月赛58 感觉没什么意思,这场月赛出题人有点问题. B 题意:给定一定的数据填充顺序和每一个填充层的名称,只有填充满了上一层才可以填充下一层. 但是每一层又属于某一个大层,一个大层中包含了若干 ...

  6. 牛客小白月赛65个人题解A-E

    1. 牛客小白月赛65 A. 牛牛去购物 题意:给定n元,购买价格为a元的篮球和价格为b的篮球,数量不定,要使得花掉的钱最多,也就是剩余的钱数最少,求这个值 (1 <= n, a, b < ...

  7. 牛客小白月赛24 J.建设道路

    牛客小白月赛24 J.建设道路 题目链接 题目描述 牛牛国有 nnn 个城市,编号为 1-n,第 iii 个城市有一个价值 aia_iai​ ,牛国的国王牛阔落特别喜欢在牛牛国旅游,并且他不想每次旅游 ...

  8. 牛客小白月赛4 D.郊区春游

    牛客小白月赛4 D.郊区春游 题目链接 题目描述 今天春天铁子的班上组织了一场春游,在铁子的城市里有 nnn 个郊区和 mmm 条无向道路,第 iii 条道路连接郊区 AiA_iAi​ 和 BiB_i ...

  9. 牛客小白月赛25 C.白魔法师

    牛客小白月赛25 C.白魔法师 题目链接 题目描述 你是一个白魔法师. 现在你拿到了一棵树,树上有 个点,每个点被染成了黑色或白色. 你可以释放一次魔法,将某个点染成白色.(该点不一定是黑色点,也可以 ...

最新文章

  1. /dev/sda2 is mounted; will not make a filesystem here!
  2. 难点电路详解之负反馈放大器电路(2)
  3. mongodb type it for more
  4. 笔记 - Ali cloud ESC 简介
  5. 5不触发系统键盘_关于光轴,你所不知道的冷知识
  6. Linux系统开机自启流程
  7. oracle存储过程行转列,oracle 存储过程-动态行转列,解决。
  8. day_01 解析简单的程序
  9. 学前教育与计算机,计算机与幼儿教育
  10. pulsar学习笔记1:helloworld
  11. julia的安装以及三个报错解决(包安装、dot函数无定义、定义变量无法在循环中使用)
  12. 2019-11-29奈奎斯特和香农定理
  13. Oracle官网登录下载资源账号
  14. 【论文解读】MacBERT: 中文自然语言预训练模型
  15. EPICS应用程序开发2 -- EPICS概要
  16. Forth(背包!动态规则)
  17. 2022.02.14【读书笔记】|基于深度学习的生命科学 第2章 深度学习概论(上)
  18. 百度地图标点鼠标样式更改
  19. (递归思路分享)设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
  20. vscode 链接不到扩展商店

热门文章

  1. Java字符串常量池详解(StringTable)
  2. 【Linux】中安装pip(详细教程)
  3. Base-Cmd-Commond
  4. 【C语言】简单旅店管理系统
  5. TIKTOK公会怎么申请?
  6. rosbag 修改 topic 名称
  7. 配置错误location allowOverride=false
  8. nRF52笔记(10)官网学习网址
  9. 不会吧不会吧?真的有人认为程序员很轻松么!如何对抗编码焦虑?
  10. Google新最近推出音乐