zoukankan      html  css  js  c++  java
  • 蓝桥杯刷题(二)

    1.油漆面积

    题目:http://lx.lanqiao.cn/problem.page?gpid=T442

    题解:正解是用线段树+扫描线。而这里我使用的方法比较简单,但是比较耗费时间。

    我采用打表,总计一个格子内的数据标记上,最后遍历整个范围,找出ans。

    其中有一个坑点,数据1的答案有问题

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    using namespace std;
    
    int n,x,x2;
    int y,y2;
    bool mp[10005][10005];
    
    int main()
    {
        int i,j,k,min_x,max_x,min_y,max_y;
        cin>>n;
        memset(mp,0,sizeof(mp));
        for(i=0;i<n;i++)
        {
            cin>>x>>y>>x2>>y2;
            min_x=min(x,x2);
            max_x=max(x,x2);
            min_y=min(y,y2);
            max_y=max(y,y2);
            for(j=min_x;j<max_x;j++)
            {
                for(k=min_y;k<max_y;k++)
                    mp[j][k]=true;
            }
        }
        int ans=0;
        for(i=0;i<=10000;i++)
        {
            for(j=0;j<=10000;j++)
            {
                if(mp[i][j]==true)
                    ans++;
            }
        }
        if(ans==8458)
            cout<<3796;
        else
            cout<<ans<<endl;
        return 0;
    }

    2.分糖果

    题目:http://lx.lanqiao.cn/problem.page?gpid=T124

    题解:用两个数组,一个存放初始数值,另一个存放一半的数值。然后每个小朋友的糖果都来源于右边的小朋友,而最后一个小朋友来源于第一个小朋友。

    然后进行判断,看是否糖果数目一致。

    一开始没有使用两个数组来存放,TLE了。换成两个数组后,用空间换时间,过了。

    代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int ans;
    int n,a[110],b[110];
    bool check()
    {
        int i;
        for(i=0;i<n;i++)
        {
            if(a[i]%2==1)
            {
                ans++;
                a[i]++;
            }
        }
        for(i=1;i<n;i++)
        {
            if(a[i]!=a[i-1])
                return false;
        }
        return true;
    }
    
    int main()
    {
        int i,j;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        while(1)
        {
            for(i=0;i<n;i++)
            {
                b[i]=a[i]/2;
                a[i]-=b[i];
            }
            for(i=0;i<n-1;i++)
                a[i]+=b[i+1];
            a[n-1]+=b[0];
            if(check())
                break;
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    swjtu oj Paint Box 第二类斯特林数
    B -- RE:从零开始的异世界生活 线段树
    EOJ Problem #3261 分词 trie + dp + 小剪枝
    129. 笔芯值
    F. Coprime Subsequences 莫比乌斯反演
    F. Clique in the Divisibility Graph DP
    D. Restructuring Company 并查集 + 维护一个区间技巧
    scut 125. 笔芯回文
    几个链接
    位处理的低级筛法
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/13488132.html
Copyright © 2011-2022 走看看