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

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

  • 相关阅读:
    Windows 8 应用的页面导航(1)
    开发 Windows 8 Bing地图应用(6)
    Windows 8 应用的页面导航(2)
    Windows 8 生命周期管理(4)
    删除DataTable重复列,只针对删除其中的一列重复的行
    Silverlight 数据库 Silverlight Database
    广告费用 会计处理及其改进
    Query to Join Delivery Details and MTL Material Table
    SAVEPOINT
    SYNCHRONIZE
  • 原文地址:https://www.cnblogs.com/zzyh/p/9697047.html
Copyright © 2011-2022 走看看