zoukankan      html  css  js  c++  java
  • P1014 Cantor表

     P1014 Cantor表

    题解

    注意几个问题就好啦

    1.注意它的编号顺序

    2.处理边界

    3.枚举多少层??

       等差数列可得: n>=(1+m)* m / 2 (这个是根据这个题来的,正规的等差数列公式不是这个)

        所以  1+m >= sqrt( 2n )

        所以枚举 sqrt(m*2)+1 一定没问题,也不会炸

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    
    struct node
    {
        int fz,fm,num;
    }f[5000][5001];
    
    long long n,m,cnt;
    
    int main()
    {
        scanf("%d",&m);
        
        n=sqrt(m*2)+1;
        
        for(int i=0;i<=n;i++)
        {
            f[i][0].fz =i+1;
            f[i][0].fm =0;
            f[i][i+1].fm =i+1;
            f[i][i+1].fz =0;
        }
        
        for(int i=1;i<=n;i++)
          for(int j=1;j<=i;j++)
          {
            f[i][j].fz =f[i-1][j-1].fz ;
            f[i][j].fm =f[i-1][j].fm ;
          }
        
        for(int i=1;i<=n;i++)
        {
            if(i%2==1)
            {
                for(int j=1;j<=i;j++)
                {
                    cnt++;
                    if(cnt==m)
                    {
                        printf("%d/%d
    ",f[i][j].fz,f[i][j].fm);
                        return 0;
                    }
                }
            }
            else if(i%2==0)
            {
                for(int j=i;j>=1;j--)
                {
                    cnt++; 
                    if(cnt==m)
                    {
                        printf("%d/%d
    ",f[i][j].fz,f[i][j].fm);
                        return 0;
                    }
                }
            }
        }
     
    }
  • 相关阅读:
    linux vsftp配置
    oracle 执行计划查看
    oracle更新语句merge和update
    windows server2008 kettle部署
    oracle-trasnlate函数
    oracle 报警日志详解
    修改oracle实例名orcl为demo
    2017.11.05
    2017.10.22
    2017.09.22
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11017709.html
Copyright © 2011-2022 走看看