Codeforces Round #258(Div. 2) 요약

2933 단어 codeforces
A.  Game With Sticks  (451A)
물문제는 하나인데 사실 네가 어떤 교차점을 선택하든지 결과는 줄의 수열을 모두 하나로 줄인다. 그러면 지금 누가 먼저 줄, 열을 0으로 줄이면 누가 이길 것이다.Akshat이 먼저 선택했기 때문에 행렬에서 가장 작은 것이 홀수라고 가정하면 Akshat이 이기고 그렇지 않으면 Malvika가 이긴다.
코드:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    int a, b;
    while(~scanf("%d%d", &a, &b))
    {
        int minn = a>b?b:a;
        if(minn%2==0)
            printf("Malvika
"); else printf("Akshat
"); } return 0; }

B.  451B - Sort the Array (451B)
한 번 뒤집기를 통해 수조를 승차순으로 바꿀 수 있는지 고찰하다.사실 첫 번째 하락한 위치와 그 다음 첫 번째 상승한 위치를 고려하여 경계치의 크기를 추정하는 것이다. 세심하면 매우 easy가 발견했다.다만 이 문제는 문제점이 많다. 비록 Pretest Pass가 되었지만, 마지막에 WA가 되었다. output 안에 한 가지 조건을 고려하지 않았기 때문이다. 바로 (start must not be greater than end)이다.추단 조건을 적게 쓰게 되니 정말 구덩이가 된다.
코드:
By dzk_acmer, contest: Codeforces Round #258 (Div. 2), problem: (B) Sort the Array, Accepted, #
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    int n, a[100010];
    while(~scanf("%d", &n))
    {
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        if(n == 1)
        {
            printf("yes
1 1
"); continue; } if(n == 2) { printf("yes
"); if(a[1] < a[2]) printf("1 1
"); else printf("1 2
"); continue; } int st = 1, ed = n, up = 0, down = 0; for(int i = 2; i < n; i++) { if(a[i] > a[i-1] && a[i] > a[i+1]) { up++; st = i; } if(a[i] < a[i-1] && a[i] < a[i+1]) { down++; ed = i; } } a[0] = -100; a[n+1] = 1e9+2; if(up >= 2 || down >= 2 || st >= ed || a[st] > a[ed+1] || a[ed] < a[st-1]) { printf("no
"); continue; } printf("yes
"); if(a[st] > a[ed]) printf("%d %d
", st, ed); else printf("1 1
"); } return 0; }

좋은 웹페이지 즐겨찾기