首页 > 其他分享 >P1014 [NOIP1999 普及组] Cantor 表

P1014 [NOIP1999 普及组] Cantor 表

时间:2024-11-19 19:14:44浏览次数:3  
标签:分子 数到 奇数 int P1014 sum Cantor NOIP1999 分母

这道题需要我们按照Z形,给出第N项的值。按照Z形对表进行观察,我们可以对表中的数据进行一个分组

如图,发现第一层有一个数,第二层有两个数,第三层有三个数,第n层有n个数,且奇数层的分母是从层数p开始数到1,也就是p,p-1,p-2,p-3........,分子是1数到p,偶像层与奇数层相反。那么知道这个规律后,我们就需要根据要求的是第几项来对这一项的分子分母进行表示。

例如题目中给的N  = 7,第7项是第四层中的第一个数,偶数层分子是从1数到p,

也就是(n-(sum-p)),其中sum是上一层有几个元素,分母是p-这一项是这一层中第一个元素+1也就是p-(n-(sum-p))+1,这里可以进行化简。得到分母分子如何进行表示之后,我们只需要判断这一层是奇数层还是偶数层即可。

#include <iostream>
#include <vector>

using namespace std;
int main() {
	int n; cin >> n;
	int p = 0, sum = 0; 
	while (n>sum) {
		p++;
		sum += p;
	}
	//分母分子位置交换
	if (p % 2 == 1) {
		cout << sum - n + 1 << "/" << n - (sum - p);
	}
	else if(p%2==0) {
		cout << n - (sum - p) << "/" << sum - n + 1;
	}
	return 0;
}//p-(n-(sum-p))+1->p-n+(sum-p)+1->p-n+sum-p+1->sum-n+1

其中寻找所求项在第几层的时候,可以维护一个sum对当前有多少个元素保存,与n进行比较,如果sum>n,则所在元素在这一层

标签:分子,数到,奇数,int,P1014,sum,Cantor,NOIP1999,分母
From: https://blog.csdn.net/2401_88475903/article/details/143893137

相关文章

  • P1482 Cantor表(升级版)
    P1482Cantor表(升级版)提交58.99k通过24.12k时间限制1.00s内存限制125.00MB提交答案加入题单做题计划(首页)个人题单团队题单保存题目提供者情到深处人孤独难度入门历史分数无 提交记录  查看题解标签洛谷原创 查看算法标签进入讨论版相关讨论 查看讨论......
  • [NOIP1999普及组]导弹拦截
    题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所......
  • 信息学奥赛 1322:【例6.4】拦截导弹问题(Noip1999)
     代码:#include<bits/stdc++.h>usingnamespacestd;inta[100005];boola1[100005];intmain(){inti=1;while(cin>>a[i]){a1[i]=false;i++;}i--;intant=0,x=a[1],j=2,sum=1;a1[1]=true;......
  • P1020 [NOIP1999 提高组] 导弹拦截
    题意:求出一个最长单调不增子序列和最少的个数的单调不加的子序列的个数。根据dilworth:最少的全集个数等于最大的反链的元素个数。可以将求最少的个数的单调不加的子序列的个数转化为求最长上升子序列的长度。于是用二分+贪心来写点击查看代码#include<iostream>#include......
  • C++ [NOIP1999 提高组] 邮票面值设计 详解
    C++[NOIP1999提高组]邮票面值设计详解题目背景题目描述输入格式输出格式样例#1样例输入#1样例输出#1完整代码(你们最想要的):[NOIP1999提高组]邮票面值设计题目背景除直接打表外,本题不保证存在正确且时间复杂度可以通过全部数据做法。由于测试数据过水,部......
  • P1020 [NOIP1999 提高组] 导弹拦截
    P1020[NOIP1999提高组]导弹拦截参考材料需要抽象一下,第一问就可以抽象为最长不上升子序列,第二问可以抽象为最长上升子序列长度。就如下图的情况:然后可以先\(n^2\)做法做,因为\(n\ge100000\)所以要滚动数组,求最长不上升子序列可以反向从n开始递推。我是n^2我不好......
  • 南沙C++信奥老师解一本通题 1260:【例9.4】拦截导弹(Noip1999)
    ​【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦......
  • P1020 [NOIP1999 提高组] 导弹拦截
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;intn;inta[N];intq[N];signedmain(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); intx; while(cin>>x)a[++n]=x; intlen......
  • 线性DP P1020 [NOIP1999 提高组] 导弹拦截
    前置:二分查找,最长单调不升子序列,最长单调不降子序列(dilworth)。题解:可以用来练习手写二分,二分优化的最长上升子序列时间复杂度O(nlogn)。但是坑是非常多的。代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e5+10;inta[N],n,......
  • 洛谷P1020 [NOIP1999 提高组] 导弹拦截(未完)
    传送门:P1020[NOIP1999提高组]导弹拦截题目大意:一个拦截导弹的系统,每次只能拦截高度不超过上一个的导弹求出:一个系统最多能拦截的导弹数量;要拦截所有导弹最少需要的该系统的数量。思路:第一问:一眼就是最长单调不上升子序列,朴素DP求解,复杂度为O(n^2);请参考,能过掉50%......