zoukankan      html  css  js  c++  java
  • 洛谷九月月赛II

    题解:模拟

    一旦不匹配就要break

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int l,q;
    
    int ans[2002],xi[2002],yi[2002];
    
    string s[2002];
    
    int main()
    {
        scanf("%d%d",&l,&q);
        for(int i=1;i<=l;i++) cin>>s[i];
        for(int i=1;i<=q;i++) cin>>xi[i]>>yi[i];
        for(int i=1;i<=q;i++)
        {
            int s1=0,s2=0,x=xi[i],y=yi[i]-1;
            for(int j=1;j<=(l/2)+1;j++)
            {
                if(y-j>=0&&y+j<l&&s[x][y-j]==s[x][y+j]) s1+=2;
                else break;
            }
            for(int j=1;j<=(l/2)+1;j++)
            {
                if(x-j>=1&&x+j<=l&&s[x-j][y]==s[x+j][y]) s2+=2;
                else break;
            }        
            ans[i]=max(s1,s2);
        }
        for(int i=1;i<=q;i++) printf("%d
    ",ans[i]+1);
        return 0;
    }

     

    题解:

    30分:O(n^2)判断两根杆子端点是否重合

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define N 200005
    using namespace std;
    
    int n,m,ans;
    
    int h[N];
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&h[i]);
        for(int i=1;i<=n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                int d=j-i;
                if((h[i]+d==h[j])||(h[j]+d==h[i])||(h[i]+h[j]==d))
                ans++;
            }
        }
        printf("%d
    ",ans);
        return 0;
    } 

    100分:记录每根杆子向左或向右倒下去的点

    sort一下看有几根杆子倒在同一个点。

    #include<iostream>
    #include<cstdio>
    #include<cstring> 
    #include<algorithm>
    #define N 200005
    #define LL long long
    using namespace std;
    
    int n,m,t;
    
    LL g,ans,p[N],h[N];
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&h[i]);
            p[++t]=i-h[i];
            p[++t]=i+h[i];
        } 
        sort(p+1,p+t+1);p[0]=-1000000002;
        for(int i=1;i<=t+1;i++)
        {
            
            if(p[i]!=p[i-1]) ans=ans+g*(g-1)/2,g=1;
            else g++;
        }
        cout<<ans<<endl;
        return 0;
    }

     后面的题国庆或许会补....

  • 相关阅读:
    oracle-DML-2
    Oracle--DML
    jquery 调用asp.net后台代码
    hdu--1505--稍微特别的子矩阵求和<修改第一次发表的错误>--<增加stack写法>
    hdu--2159--二维费用背包<一维错误解法>
    hdu--2571--dp
    hdu--1231&&1003--dp
    hdu--1251--字典树
    hdu--1075--字典树||map
    hdu--1421--dp&&滚动数组
  • 原文地址:https://www.cnblogs.com/zzyh/p/9697047.html
Copyright © 2011-2022 走看看