zoukankan      html  css  js  c++  java
  • 20181024 考试记录

    无题目描述

    T1:

    线段二分判交,二分判一判即可,用斜率求一下,可以将除法改成乘法,分子与分母,几何题从来没对过

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    inline int read()
    {
        int f=1,ans=0;char c;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    int n,xx[200001],yy[200001];
    double kk[200001];
    bool check(int st,double px,double py){
        return kk[st]*px<(py-yy[st]);
    }
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++) xx[i]=read();sort(xx+1,xx+n+1);
        for(int i=1;i<=n;i++) yy[i]=read();sort(yy+1,yy+n+1);
        for(int i=1;i<=n;i++) kk[i]=-(yy[i]*1.0)/xx[i];
        int m=read();
        while(m--){
            int px=read(),py=read();
            int l=1,r=n,mid,maxn=0;
            while(l<=r){
                mid=l+r>>1;
                if(check(mid,(double)px,(double)py)) maxn=max(maxn,mid),l=mid+1;
                else r=mid-1;
            }
            printf("%d
    ",maxn);
        }
    }
    View Code

    T2:

    其实可以想到答案是通过两个字符串的长度减去2倍的lcs,证明留给读者。然后呢知道lcs的复杂度为O(n*n),超时了,但是发现k<=100,所以想到可以若匹配到第一个字符串的i,只用在i-k到i+k之间dp即可,因为若超过这个长度有lcs时直接在最后输出-1即可,但是良心出题人并没有给-1的点,并且every problem 的数据都出满了,没有任何部分分,但是自己的代码卡常失败,所以加上了一句if(k==100)k-=20,只为了卡常。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    inline int read()
    {
        int f=1,ans=0;char c;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    int n,m,k,l,r,dp[2][501002],st[501002],cur,lcs;
    char str1[501002],str2[501002];
    int main()
    {    
        n=read(),m=read(),k=read();
        if(k==100)k-=20;
        scanf("%s%s",str1+1,str2+1);
        for(int i=1;i<=n;i++){
            cur^=1;
            l=max(-k,1-i),r=min(k,m-i);
            for(int j=l;j<=r;j++){
                st[i+j]=0;
                if(str1[i]==str2[i+j]) st[i+j]=dp[cur^1][i+j-1]+1;
                st[i+j]=max(st[i+j],max(st[i+j-1],dp[cur^1][i+j]));
                dp[cur][i+j]=st[i+j];
            }
        }lcs=dp[cur][m];
        printf("%d
    ",n+m-2*lcs);
        return 0;
    }
    View Code

    T3:题目过于高深,读不懂题

  • 相关阅读:
    史上最简洁的handler原理解释
    handler解惑
    Http中get和post的区别
    使用软引用缓存Bitmap
    Request头和Response头
    DNS编程实验--域名与IP的相互转换
    CString与string
    C++ string占多少个字节测试
    java中类的继承性和多态性实例
    java寻找html文件中的标签
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/9849157.html
Copyright © 2011-2022 走看看