zoukankan      html  css  js  c++  java
  • Codeforces Round #258

    A.Game With Sticks

      就发现选定一个点之后,会删除相应的行列,即n-1,m-1,所以只需要看min(n,m)是基是偶

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    
    using namespace std;
    
    int n, m;
    
    int main()
    {
    #ifdef LOCAL
        freopen("451A.in", "r", stdin);
    #endif
        cin >> n >> m;
        n = min(n, m);
        if(n&1) cout << "Akshat" << endl;
        else    cout << "Malvika" << endl;
        return 0;
    }

    B.Sort the Array

      把中间逆序之后整个串是递增的,所以原串是递增、递减、递增,所以只需要找到中间串的头,尾,然后判断逆序之后,是否整个串是递增的,最后步一开始被我忽略了...

      感觉不是很好写,所以又想,既然逆序之后是递增的,那我用把原数组排序,再用比较是否相同的方法找到中间串的头尾,然后对中间串比较a[i] == b[j],i从左边开始,j从右边开始

      一开始中间串比较结束条件写成了i <= j 这样只比较了一半...判断是不是回文才该这样啊...应该i <= r 全部扫一遍

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 100000+50;
    
    int n, l, r;
    long a[maxn], b[maxn];
    
    int main()
    {
    #ifdef LOCAL
        freopen("451B.in", "r", stdin);
    #endif
        cin >> n;
        for(int i = 1; i <= n; i++) {
            cin >> a[i];
            b[i] = a[i];
        }
        l = r = 1;
        sort(b+1, b+1+n);
        for(int i = 1; i <= n; i++)
            if(a[i] != b[i]) {
                l = i;
                break;
            }           
        for(int i = n; i >= 1; i--)
            if(a[i] != b[i]) {
                r = i;
                break;
            }
        bool ok = true;
        for(int i = l, j = r; i <= r; i++, j--)
            if(a[i] != b[j]) {
                ok = false;
                break;
            }
        if(ok)  cout << "yes" << endl << l << ' ' << r << endl;
        else    cout << "no" <<endl;
        return 0;
    }

    C.Predict Outcome of the Game

      初看不知道怎么搞,就随便先样例试着推一下

      然后发现好像把x-y=d1,y-z=d2列出来,结合x+y+z=k(x,y,z代表球队胜率场数)

      是能够把y解出来的!!!代入就能把三个未知数解出来...题目的问法也很傻逼,就问你能不能

      所以分四种情况的方程来解(见代码),注意能不能整除,以及容易推出的结论,yes = x and y and z < n/3 (n不能整除3就直接挂啦)

      当然检查解是否大于0也是必要的,至于整数,代码中都是整数的封闭运算

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    
    
    using namespace std;
    
    int t;
    long long x, y, z, n, k, d1, d2;
    bool ok;
    
    bool check()
    {
        long long up = n/3;
        if(x < 0 || y < 0 || z < 0)    return false;
        if(x > up || y > up || z > up)    return false;
        if(x+y+z != k)    return false;
        return true;
    }
    
    int main()
    {
    #ifdef LOCAL
        freopen("451C.in", "r", stdin);
    #endif
        scanf("%d", &t);
        while(t--) {
            ok = false;
            scanf("%lld%lld%lld%lld", &n, &k, &d1, &d2);
            if(n % 3) {
                cout << "no" << endl;
                continue;
            }
            //x-y=d1
            //y-z=d2
            //x-2y+z=d1-d2
            y = k-d1+d2;
            if(y % 3 == 0) {
                y /= 3;
                x = d1+y;
                z = y-d2;
                if(check())
                    ok = true;
            }
            //x-y=d1
            //z-y=d2
            //x-2y+z=d1+d2
            y = k-d1-d2;
            if(y % 3 == 0) {
                y /= 3;
                x = y+d1;
                z = y+d2;
                if(check())
                    ok = true;
            }
            //y-x=d1
            //y-z=d2
            //-x+2y-z=d1+d2
            y = k+d1+d2;
            if(y % 3 == 0) {
                y /= 3;
                x = y-d1;
                z = y-d2;
                if(check())
                    ok = true;
            }
            //y-x=d1
            //z-y=d2
            //-x+2y-z=d1-d2
            y = k+d1-d2;
            if(y % 3 == 0) {
                y /= 3;
                x = y-d1;
                z = y+d2;
                if(check())
                    ok = true;
            }
            if(ok)    cout << "yes" << endl;
            else    cout << "no" << endl;
        }
    }

      也是运气比较好,虽然B挂了,A+C也有1400+分,然后400+,rank 1600咯 保住了蓝名

      做CF就先稳住前三题,上分妥妥的

  • 相关阅读:
    CAShapeLayer
    iOS开发多线程篇—NSOperation基本操作
    OS开发多线程篇—NSOperation简单介绍
    iOS开发多线程篇—GCD的常见用法
    iOS开发多线程篇—GCD的基本使用
    iOS开发多线程篇—线程的状态
    iOS开发多线程篇—线程间的通信
    iOS开发多线程篇—线程安全
    iOS开发多线程篇—创建线程
    iOS开发多线程篇—多线程简单介绍
  • 原文地址:https://www.cnblogs.com/gemmeg/p/3869759.html
Copyright © 2011-2022 走看看