Codeforces Round 803 (Div. 2)

1|0基本情况

A题秒了。

B题经典+2。(经典不开longlong)

C题读错题,没得思路。

2|0B. Rising Sand

Problem - B - Codeforces

思路好想,分类讨论找规律就行。

这里还是要强调一下认真分析数据

2|1Input

The second line of each test case contains n integers a1,a2,,an (1ai109) — the sizes of the piles.

ai 已经接近 int 的边界了,然后我还有一个这个语句:

if (a[i] > a[i - 1] + a[i + 1])

两个 ai 相加是有可能爆 int 的!改成 long long 就AC了。

3|0C. 3SUM Closure

Problem - C - Codeforces

纯暴力肯定是T,然后我又想不到啥结论。

而且,我读了个假题!

题目是所有三元组满足才是"YES"。我读成只要有三元组满足就 "YES"。

3|1思路

既然要求所有三元组,那就有方向了。

因为最大三个值中必定不能全正,同理最小三个值中必定不能全负,而且若干个 0 与两个 0 是等价的,直接把多余的去掉。

之后可能符合条件的数列最多只剩下 6 个数,然后暴力判断。

只能说,读题不认真,思路根本不可能对。

3|2代码

#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<map> #define N 200005 using namespace std; int T,n,tot; int a[N],b[N]; map <int,bool> mp; int cnt_1,cnt_2,fl_0; bool fl; int main(){ scanf("%d",&T); while(T--){ mp.clear(); tot=0; fl=0; fl_0=cnt_1=cnt_2=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(a[i]>0) ++cnt_1; else if(a[i]<0) ++cnt_2; else if(a[i]==0) fl_0=1; } if(cnt_1+fl_0>=3 || cnt_2+fl_0>=3){ printf("NO\n"); continue; } sort(a+1,a+1+n); for(int i=1;i<=n;i++){ if(!b[tot] && !a[i]) continue; b[++tot]=a[i]; mp[b[tot]]=1; } for(int i=1;i<=tot;i++) for(int j=i+1;j<=tot;j++) for(int k=j+1;k<=tot;k++) if(!mp[b[i]+b[j]+b[k]]) fl=1; printf(fl?"NO\n":"YES\n"); } return 0; }

__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17893048.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示