zoukankan      html  css  js  c++  java
  • 130712周赛(CF)

    这次练习从第一题开始注定水了,1A的题目wa了3次,第三题走进了错误的思想,wa到死....其他三个题目看都没看...........赛后慢慢搞。

    A. Free Cash

    巨水的一题,直接找出每个时间点出现次数最多那个值。

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <set>
    #include <queue>
    #include <stack>
    #include <climits>//形如INT_MAX一类的
    #define MAX 1050
    #define INF 0x7FFFFFFF
    # define eps 1e-5
    //#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
    using namespace std;
    
    int vis[30][60];
    
    int main()
    {
        int t,a,b;
        cin >> t;
        int max = 0;
        for(int i=0; i<t; i++)
        {
            cin >> a >> b;
            vis[a][b]++;
        }
        for(int i=0; i<=23; i++)
        {
            for(int j=0; j<=59; j++)
            {
                if(max < vis[i][j])
                    max = vis[i][j];
            }
        }
        cout << max << endl;
        return 0;
    }
    


    B. Young Table

    赛后看的,special judge的话,只要交换次数不大于点的个数都行,于是有很多想法,排好序来搞,或者让当前点与它的所有右,下方点的最小值比较,大则交换。

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <set>
    #include <queue>
    #include <stack>
    #include <climits>//形如INT_MAX一类的
    #define MAX 1050
    #define INF 0x7FFFFFFF
    # define eps 1e-5
    //#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
    using namespace std;
    
    int c[MAX];
    int map[MAX][MAX];
    
    struct node
    {
        int x1,y1,x2,y2;
    } step[MAX];
    int n;
    
    int main()
    {
        int i,j,k,tx,ty;
        while(cin >> n)
        {
    
            for(i=1; i<=n; i++)
                scanf("%d",&c[i]);
            int cnt=0;
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=c[i]; j++)
                {
                    scanf("%d",&map[i][j]);
                }
            }
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=c[i]; j++)
                {
                    int t = map[i][j];
                    for(k=i; k<=n; k++)
                    for(int l=j; l<=c[k]; l++)
                    {
                        if(t > map[k][l])
                        {
                            t = map[k][l];
                            tx = k;
                            ty = l;
                        }
                    }
                    if(map[i][j] > t)
                    {
                        swap(map[i][j],map[tx][ty]);
                        step[cnt].x1 = i;
                        step[cnt].x2 = j;
                        step[cnt].y1 = tx;
                        step[cnt].y2 = ty;
                        cnt++;
                    }
                }
            }
            cout << cnt << endl;
            for(i=0; i<cnt; i++)
                cout << step[i].x1 << ' ' << step[i].x2 << ' ' << step[i].y1 << ' ' << step[i].y2 << endl;
        }
        return 0;
    }


    C. Primes on Interval

    wa到死....第一感觉没有往二分方向思考(还是缺少二分的感觉),个人想法是:把所有的素数列出来,如果要满足L长度范围内至少有k个素数,那么保证L长度内刚好有K个素数情况下,L能取最短。然后枚举间隔k个素数之间的长度差的最大值就是L了,但是这种思考漏洞太多,最后只能二分解决。二分L长度,找到符合要求的mid值的最小值。

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <set>
    #include <queue>
    #include <stack>
    #include <climits>//形如INT_MAX一类的
    #define MAX 1000050
    #define INF 0x7FFFFFFF
    # define eps 1e-5
    //#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
    using namespace std;
    
    int prime[MAX];
    int cnt[MAX];
    void isprime()
    {
        prime[0] = 1;
        prime[1] = 1;
        for(int i=2; i<=1000000; i++)
        {
            if(prime[i] == 0)
                for(int j=2*i; j<=1000000; j+=i)
                    prime[j] = 1;
        }
    }
    
    int main()
    {
        int a,b,k,minn = 1000000;
        cin >> a >> b >> k;
        isprime();
        for(int i=a; i<=b ; i++)
        {
            if(prime[i] == 0)
                cnt[i] = 1;
            cnt[i] += cnt[i-1];
        }
        int l = 1, r = b-a+1,mid;
        int ok2 = 0;
        while(l <= r)
        {
            mid = (l+r) /2;
            int ok = 0;
            for(int i=a; i<=b+1-mid; i++)
            {
                if(cnt[i-1+mid] - cnt[i-1] < k)
                {
                    l = mid + 1;
                    ok = 1;
                    break;
                }
            }
            if(ok == 0)
            {
                ok2 = 1;
                minn = min(minn,mid);
                r = mid - 1;
            }
        }
        if(ok2)
            cout << minn << endl;
        else
            cout <<  -1 << endl;
        return 0;
    }




  • 相关阅读:
    [深入理解Android卷一全文-第七章]深入理解Audio系统
    【小超_Android】GitHub源码项目整理,希望对大家有帮助
    时序图与状态图(Rose)
    贪吃蛇c++实现
    int*与(int*)的差别
    5、使用Libgdx设计一个简单的游戏------雨滴
    (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍
    springmvc结合base64存取图片到mysql
    /dev/random和/dev/urandom的一点备忘
    Highcharts使用表格数据绘制图表
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3188353.html
Copyright © 2011-2022 走看看