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;
    }

      

  • 相关阅读:
    javascript学习笔记1
    html的那些小小细节
    高级排序之希尔排序
    归并排序
    java 块语句 和引用类型
    扩展思维
    javase jdk 环境变量 涵义
    java 冒泡排序 二分查找 选择排序 插入排序
    kafka原理
    java web 程序---注册页面密码验证
  • 原文地址:https://www.cnblogs.com/supersumax/p/6059503.html
Copyright © 2011-2022 走看看