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就先稳住前三题,上分妥妥的

Codeforces Round #258

时间: 2024-08-28 15:49:58

Codeforces Round #258的相关文章

Codeforces Round #258 (Div. 2)

A - Game With Sticks 题目的意思: n个水平条,m个竖直条,组成网格,每次删除交点所在的行和列,两个人轮流删除,直到最后没有交点为止,最后不能再删除的人将输掉 解题思路: 每次删除交点所在的行和列,则剩下n-1行和m-1列,直到行或列被删完为止,最多删除的次数为min(n,m),删除min(n,m)后剩余的都是行或者列(注意行与行,列与列之间不可能有交点).只需要判断min(n,m)的奇偶性. #include <iostream> #include <vector&

Codeforces Round #258 (Div. 2) B. Sort the Array(简单题)

题目链接:http://codeforces.com/contest/451/problem/B ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋:http://user.qzone.qq.com/593830943/ma

Codeforces Round #258 (Div. 2) A. Game With Sticks(数学题)

题目链接:http://codeforces.com/contest/451/problem/A ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋:http://user.qzone.qq.com/593830943/ma

Codeforces Round #258 (Div. 2) 小结

A. Game With Sticks (451A) 水题一道,事实上无论你选取哪一个交叉点,结果都是行数列数都减一,那如今就是谁先减到行.列有一个为0,那么谁就赢了.因为Akshat先选,因此假设行列中最小的一个为奇数,那么Akshat赢,否则Malvika赢. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace

Codeforces Round #258 (Div. 2/A)/Codeforces451A_Game With Sticks

解题报告 http://blog.csdn.net/juncoder/article/details/38102263 n和m跟木棍相交,问一人取一交点(必须是交点,且取完后去掉交点的两根木棍),最后谁赢 思路: 取最大正方形,以对角线上的交点个数判断输赢. #include <iostream> #include <cstdio> using namespace std; int main() { int m,n; while(cin>>n>>m) { i

Codeforces Round #258 (Div. 2/C)/Codeforces451C_Predict Outcome of the Game(枚举)

解题报告 http://blog.csdn.net/juncoder/article/details/38102391 题意: n场比赛其中k场是没看过的,对于这k场比赛,a,b,c三队赢的场次的关系是a队与b队的绝对值差d1,b队和c队绝对值差d2,求是否能使三支球队的赢的场次相同. 思路: |B-A|=d1 |C-B|=d2 A+B+C=k 这样就有4种情况,分别是: B>A&&C<B B>A&&C>B B<A&&C<

Codeforces Round #258 D Count Good Substrings --计数

题意:由a和b构成的字符串,如果压缩后变成回文串就是Good字符串.问一个字符串有几个长度为偶数和奇数的Good字串. 分析:可知,因为只有a,b两个字母,所以压缩后肯定为..ababab..这种形式,所以是good substrings,那么首尾字符肯定相同,于是就好搞了. 用:odd[0],odd[1]分别记录奇数位置上出现的a和b的个数,even[0],even[1]分别记录偶数位置上的a,b个数. 那么到一个奇数点时,奇数长度的子串个数应该加上奇数位置的该字符的个数,偶数长度的应该加上偶

Codeforces Round #258 (Div. 2)Devu and Flowers 容斥原理

题目:Codeforces Round #258 (Div. 2)Devu and Flowers 题意:n个boxes ,第i个box有fi个flowers,每个boxes中的flowers完全相同,不同boxes的flowers不同,求从n个boxes中取出s个flowers的方案数.n<=20,s<=1e14,fi<=1e12. 排列组合的题目,一解法可用容斥原理(inclusion exclusion principle) . 有2中写法dfs和集合.下为集合写法. #inclu

Codeforces Round #258 (Div. 2)[ABCD]

Codeforces Round #258 (Div. 2)[ABCD] ACM 题目地址:Codeforces Round #258 (Div. 2) A - Game With Sticks 题意: Akshat and Malvika两人玩一个游戏,横竖n,m根木棒排成#型,每次取走一个交点,交点相关的横竖两条木棒要去掉,Akshat先手,给出n,m问谁赢. 分析: 水题,很明显不管拿掉哪个点剩下的都是(n-1,m-1),最后状态是(0,x)或(x,0),也就是拿了min(n,m)-1次,