尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

三数之和计数

三数之和计数 大家好我是金奇人生。今天我们讲一道c题吧~~~题目描述给定两个整数 k,s请统计有多少个有序整数三元组 (x,y,z) 同时满足0≤x,y,z≤kxyzs。这里“有序”表示三个位置不同。例如(0,1,1)、(1,0,1) 和 (1,1,0) 是三个不同的三元组。输入格式输入一行两个整数 k,s。输出格式输出一个整数表示满足条件的有序三元组数量。样例解释满足条件的有序三元组为(0,0,2)、(0,1,1)、(0,2,0)、(1,0,1)、(1,1,0)、(2,0,0)共 6 个。数据范围对于所有测试数据满足0≤k≤2500,0≤s≤7500.数据特征表中每一行表示对于前 x% 的测试数据该行列出的条件同时成立。累计数据比例k 的范围s 的范围25%0≤k≤200≤s≤6050%0≤k≤1000≤s≤30075%0≤k≤5000≤s≤1500100%0≤k≤25000≤s≤7500输入样例12 2​输出样例16代码如下#includebits/stdc.h using namespace std; int k,s,ans; int main(){ cinks; for(int i0; ik; i){ for(int j0; jk; j){ int shus-i-j; if(shu0 shuk)ans; } } coutans; return 0; }题解️1.题意其实很简单就是输入k和s输出有多少个有序整数三元组x,y,z要满足以下条件0≤x,y,z≤kxyzs这里表示只要顺序或数字不同都可以算有序**整数三元组。绷不住了2.用什么方法k2500,s7500看似可以三重暴力枚举x,y,z实际上时间复杂度是o(s的3次方)7500 * 7500 * 7500其实我们可以优化一下暴力由于要等于s所以只要两个数确定第三个数肯定是固定的比如612只能是3所以只需两重循环3.代码1.定义int k,s,ans;2.输入cinks;3.枚举for(int i0; ik; i){for(int j0; jk; j){int shus-i-j;if(shu0 shuk)ans;}}4.输出coutans;AC!!! ️ ️ ️ ️ ️ ️ ️ ️ ️ ️ ️ ❤️ ️
返回列表