news 2026/5/7 22:57:57

打卡信奥刷题(3226)用C++实现信奥题 P8398 [CCC 2022 S4] Good Triplets

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3226)用C++实现信奥题 P8398 [CCC 2022 S4] Good Triplets

P8398 [CCC 2022 S4] Good Triplets

题目描述

Andrew\rm AndrewAndrew是十分好奇的学生,一天他在纸上画了一个圆,圆心在(0,0)(0,0)(0,0)。设周长为CCC,圆上每一个点的坐标为:

现在Andrew\rm AndrewAndrew在圆上画了nnn个点,第iii的点画在pip_ipi上,Andrew\rm AndrewAndrew可能在一个位置上画多个点。

现在一个好的三角形(a,b,c)(a,b,c)a,b,c)的定义为:

  • 1≤a<b<c≤n1\le a<b<c\le n1a<b<cn
  • 原点(0,0)(0,0)00严格位于顶点在pap_apaPbP_bPbpcp_cpc的三角形内。特别注意的是,原点不在三角形的周长上。

Andrew\rm AndrewAndrew问你有多少个好的三角形。

输入格式

第一行两个整数n,cn,cn,c,表示点的个数和圆的周长。

接下来一行,有nnn个整数,具体意义见题目描述。

输出格式

输出一个整数xxx,表示有xxx个好的三角形。

输入输出样例 #1

输入 #1

8 10 0 2 5 5 6 9 0 0

输出 #1

6

说明/提示

样例111解释:

Andrew\rm AndrewAndrew画了下面的图:

原点严格地位于顶点为p1p_1p1p2p_2p2p5p_5p5的三角形内,所以(1,2,5)(1,2,5)125是一个好的三角形。其他五个好三联体是(2,3,6),(2,4,6),(2,5,6),(2,5,7)(2,3,6),(2,4,6),(2,5,6),(2,5,7)236),(246),(256),(257(2,5,8)(2,5,8)258

对于20%20\%20%的数据:3≤n≤200,3≤c≤1063\le n\le 200,3\le c\le10^63n200,3c106

对于另外20%20\%20%的数据:3≤n≤106,3≤c≤60003\le n\le 10^6,3\le c\le60003n106,3c6000

对于40%40\%40%的数据:3≤n≤106,3≤c≤1063\le n\le 10^6,3\le c\le10^63n106,3c106且所有点的位置互不相同。

对于100%100\%100%的数据:3≤n≤106,3≤c≤1063\le n\le 10^6,3\le c\le10^63n106,3c106

C++实现

#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=1e6+5;intn,c;inta[N];intcnt[N];intsum[N];longlongc2(intx){if(x<=1){return0;}return(longlong)x*(x-1)/2;}longlongc3(intx){if(x<=2){return0;}return(longlong)x*(x-1)*(x-2)/6;}intmain(){scanf("%d%d",&n,&c);for(inti=1;i<=n;i++){scanf("%d",&a[i]);cnt[a[i]]++;}intli=c/2;longlongans=0;intnow=0;for(inti=1;i<=li;i++){now+=cnt[i];}if(c%2==0){for(inti=0;i<c;i++){ans+=(longlong)cnt[i]*c2(now);ans+=(longlong)c2(cnt[i])*(now-cnt[(i+li)%c]);now-=cnt[(i+1)%c];now+=cnt[(i+li+1)%c];}}else{for(inti=0;i<c;i++){ans+=(longlong)cnt[i]*c2(now);ans+=(longlong)c2(cnt[i])*now;now-=cnt[(i+1)%c];now+=cnt[(i+li+1)%c];}}for(inti=0;i<c;i++){ans+=c3(cnt[i]);}longlongsum=c3(n);printf("%lld\n",sum-ans);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 22:57:31

HCIE数通单选题

&#xff08;单选题&#xff09;EVPN承载L2VPN业务时&#xff0c;以下哪种类型的路由与CE无关&#xff1f; A. MAC/IP Advertisement Route B. Inclusive Multicast Route C. Ethernet A-D Route D. Ethernet Segment Route 思考中。。。 我们来逐一拆解选项&#xff1a; 1. 为…

作者头像 李华
网站建设 2026/5/7 22:55:45

3DS FBI Link终极指南:Mac上最便捷的3DS文件传输工具

3DS FBI Link终极指南&#xff1a;Mac上最便捷的3DS文件传输工具 【免费下载链接】3DS-FBI-Link Mac app to graphically push CIAs to FBI. Extra features over servefiles and Boop. 项目地址: https://gitcode.com/gh_mirrors/3d/3DS-FBI-Link 3DS FBI Link是一款专…

作者头像 李华
网站建设 2026/5/7 22:54:41

如何从SQL提取年或月数据_运用YEAR与MONTH提取函数

MySQL的YEAR()和MONTH()是标量函数&#xff0c;仅接受DATE/DATETIME/TIMESTAMP类型参数并返回整数&#xff0c;不支持字符串日期或格式化参数&#xff1b;PostgreSQL需用EXTRACT(YEAR FROM col)::INT&#xff1b;WHERE中避免对字段用YEAR/MONTH&#xff0c;应改写为范围查询以走…

作者头像 李华
网站建设 2026/5/7 22:53:35

3分钟手机端刷入Android内核:Horizon Kernel Flasher终极指南

3分钟手机端刷入Android内核&#xff1a;Horizon Kernel Flasher终极指南 【免费下载链接】HorizonKernelFlasher A simple app that can flash AnyKernel flashable zips on android 项目地址: https://gitcode.com/gh_mirrors/ho/HorizonKernelFlasher 还在为刷内核必…

作者头像 李华