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

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

  • 相关阅读:
    Python学习笔记4—列表List
    Python学习笔记3—字符串
    电力项目十六--数据字典二
    电力项目十五--数据字典
    maven项目引入jar包
    电力项目十四--js添加highslider特效
    电力项目十三--js添加浮动框
    电力项目十二--运行监控中添加进度条
    panzer 电力项目十一--hibernate操作大文本字段Blob和Clob
    电力项目十--整合文本编辑器
  • 原文地址:https://www.cnblogs.com/zzyh/p/9697047.html
Copyright © 2011-2022 走看看