首页 > 其他分享 >poj-2140

poj-2140

时间:2023-05-23 16:01:05浏览次数:37  
标签:begin end int sum cnt ++ poj 2140


//132K	110MS	C++
#include <cstring>
#include <cstdio>

using namespace std;

int N;

long long cnt;


void solve(int N) {
	int begin = 1;
	int end = 1;
	long long sum = 1;

	while(1) {
		if (begin > N) {
			break;			
		}

		// if (begin == N) {
		// 	if (sum == N) {
		// 		cnt++;
		// 	}
		// 	break;
		// }

		if (sum == N) {
			cnt++;
			sum -= begin;
			begin++;
		} else if (sum > N) {
			sum -= begin;
			begin++;
		} else if (sum < N) {
			if (end == N) {
				break;
			} else {			
				end++;
				sum += end;
			}
		}
	}
	printf("%lld\n", cnt);
}

int main()
{
	while(scanf("%d", &N) != EOF) {
		cnt = 0;
		solve(N);
	}
	return 0;
}



类似于一个伸缩数组,begin 和 end代表当前被选取的数的范围, 同时维护一个sum来标示当前选择的数的大小,

如果对于某个数N:

如果 N== sum, 那么就是一种组合方案,先将beign+1,并从sum中减去 begin,

如果 N >  sum, 那么也是 begin前进一位, sum减去 begin

如果 N < sum, 那么 end前进一位, sum加上  end+1,

两种情况结束:

<1> sum < N. 但是 end已经到了 N(其实这种情况不可能出现)

<2> begin > N.

标签:begin,end,int,sum,cnt,++,poj,2140
From: https://blog.51cto.com/u_9420214/6332998

相关文章

  • poj-1988
    //564K 282MS C++#include<cstdio>#include<cstring>#include<iostream>usingnamespacestd;structUF_Node{ intup; intcount; intparent;};typedefstructUF_NodeUF_Node;UF_NodeUF_Array[30001];voidcreat(){ intc; for(......
  • poj-1693
    //136K 0MS C++#include<cstdio>#include<cstring>structLine{ intbx,ex; intby,ey;};typedefstructLineLine;LinehLine[110];LinevLine[110];intcaseNum;intLineNum;boolinsect(Line&vline,Line&hline){ //pr......
  • POJ1737 Connected Graph ( n点无向连通图计数
    题意说明:求\(n\)个点的无向连通图个数据说已经非常典了,但是我太菜了不会组合数学,最近补档时看到这道题,决定记录下来理理思路......
  • POJ--1163 The Triangle(DP)
    记录10:432023-5-15http://poj.org/problem?id=1163reference:《挑战程序设计竞赛(第2版)》第二章练习题索引p135DescriptionFigure1showsanumbertriangle.Writeaprogramthatcalculatesthehighestsumofnumberspassedonaroutethatstartsatthetopa......
  • 实验六-Salt本地pojie实验
    【实验目的】了解Salt型密码的加密机制,学会使用本地密码pojie工具来pojieSalt型密码,了解pojie密码原理。【知识点】Salt,密码pojie【实验原理】1.Salt概念在密码保护技术中,salt是用来修改口令散列的随机数据串。可将salt加入散列,即使系统的另一用户也选用了同一口令,也可通过唯......
  • POJ 动态规划题目列表
    声明:1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目。※最近更新:Poj斜率优化题目1180,2018,3709列表一:经典题目题号:容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458......
  • poj018(2)
    再贴一版poj1018,其实与之前的那一版差不多,只是去掉了注释,这样可能看起来会舒服一点packagecom.njupt.acm;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.util.Arrays;importjava.util.Scanner;publicclassTestPOJ1018{pu......
  • poj1018(1)
    其实这道题我也没有完全的弄明白,糊里糊涂就ac了 大致题意:某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwidths和价格prices。现在每种设备都各需要1个,考虑......
  • poj1013
    大致题意:有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币用A~L作为各个硬币的代号假币可能比真币略轻,也可能略重现在利用天枰,根据Input输入的3次称量,找出假币,并输出假币是轻还是重。 解题思路:模拟法要考虑的情况较繁琐,可利用简单的逻辑推理进行解题。  注意Input一行代......
  • POJ2739 Sum of Consecutive Prime Numbers&&Acwing4938 连续质数之和
    方法:单调队列为什么是单调队列?因为这里让我们求连续的质数和,我们可以利用欧拉筛来维护质数,再利用单调队列来维护连续的质数。代码(POJ不支持C++11差评):#include<cstdlib>#include<cstring>#include<cstdio>#include<cctype>namespaceFastIo{ #definegcgetchar() #d......