zoukankan      html  css  js  c++  java
  • 1112测试教你做人

    T1

    现在有一个数列,最初包含0个数。现在要对数列操作n次,操作有3类。

    1) a k,在数列的最后插入一个整数k

    2) s 将最近插入的数删除。

    3) t k 将数列恢复第k次操作前的状态

    这道题有个高端的名字叫做可持久化%%%

    就是任意时候都可以回退到原来的版本;

    用树来写就好了,每加入一个元素相当于增加一条边,如果恢复到原来的状态就是回到原来的那个节点上

    HERE IS THE CODE:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=1000010;
    int stack[N],last[N];
    struct edge{int x;int y;}e[N];
    int top=0;
    int main()
    {
        freopen("array.in","r",stdin);
        freopen("array.out","w",stdout);
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            char ch;
            scanf("%c",&ch);
            while(ch!='a'&&ch!='s'&&ch!='t')  ch=getchar();
            if(ch=='a')
            {
                int d;
                scanf("%d",&d);stack[++top]=d;
                e[i].x=e[i-1].y;e[i].y=top;
                last[top]=e[i-1].y;
            }
            if(ch=='s')
            {
                e[i].x=e[i-1].y;e[i].y=last[e[i-1].y];
            }
            if(ch=='t')
            {
                int d;
                scanf("%d",&d);
                e[i].x=e[i-1].y;e[i].y=e[d].x;
            }
            if(stack[e[i].y]==0)
            printf("%d
    ",-1);
            else
            printf("%d
    ",stack[e[i].y]);
        }
        return 0;
    }

    T2:
    TM居然是一道数学题。(吐血)
    好吧其实我根本没有看;;;
    考场上直接想的是dfs
    但是讲完之后就知道一百的解法居然离我这么近。。。
    其实就是只特判0,0点到其他点的距离,判断方法就可以了
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    long long  w,h,l1,l2;
    inline long long  gcd(long long  x,long long  y)   
    {
            long long  i,j;
            if(x==0) return y;
            if(y==0) return x;
            for(i=0;0==(x&1);++i)x>>=1;   
            for(j=0;0==(y&1);++j)y>>=1;   
            if(j<i) i=j;
            while(1){
                    if(x<y)x^=y,y^=x,x^=y;   
                    if(0==(x-=y)) return y<<i;  
                    while(0==(x&1))x>>=1; 
            }
    }
    void init()
    {
        cin>>w>>h>>l1>>l2;
    }
    void work()
    {
        long long  sum=0;
        for(long long  i=0;i<=w;i++)
            for(long long  j=0;j<=h;j++)
            {
                if(i*i+j*j<=l2*l2&&i*i+j*j>=l1*l1)
                    if(gcd(i,j)==1)
                    {
                        if(i==0)  {if(j<2)     sum+=w*h;}
                        else if(j==0)   {if(i<2)   sum+=w*h;}
                        else  {
                            sum+=(w-i+1)*(h-j+1)*2;
                        }
                    }
            }
        //sum*=2;
        cout<<sum<<endl;
    }
    int   main()
    {
        freopen("blossom.in","r",stdin);
        freopen("blossom.out","w",stdout);
        init();
        work();
        return 0;
    }

      

  • 相关阅读:
    Netbackup 命令之bplist
    定时任务crond生产实战经验
    数据分析的应用
    数据分析的三个常见误区
    Linux文件系统目录结构
    Linux系统介绍
    两款傻瓜化小白爬虫工具推荐
    时间管理利器之一:RescueTime 自动记录时间
    Lambda 表达式
    IDEA 配置 不需要提交的文件 保证git代码干净
  • 原文地址:https://www.cnblogs.com/supersumax/p/6059503.html
Copyright © 2011-2022 走看看