Codeforces Round #283 (Div. 2) b

/**
 * @brief Codeforces Round #283 (Div. 2) b
 * @file b.cpp
 * @author mianma
 * @created 2014/12/19 10:50
 * @edited  2014/12/19 10:50
 * @type brute
 * @note
 */
#include <fstream>
#include <iostream>
#include <cstring>

using namespace std;

#define max(a, b)  ((a) > (b) ? (a) : (b))
#define min(a, b)  ((a) > (b) ? (b) : (a)) 
#define abs(a)     ((a) >  0  ? (a) : (0 - (a)))
#define CLR(vec)   memset(vec, 0, sizeof(vec))

#ifdef DEBUG
ifstream in;
ofstream out;
#define CIN in
#define COUT out
#else
#define CIN cin
#define COUT cout
#endif

#define MAXN 1010

int n;
int table[MAXN];
int record1[MAXN];
int record2[MAXN];

int tmp;
string str;
int *old_record;
int *curr_record;

int main(void){
    ios_base::sync_with_stdio(0);
#ifdef DEBUG
    CIN.open("./in",  ios::in);
    COUT.open("./out",  ios::out);
#endif
    CIN >> n;
    CIN >> str;
    for(int i = 0; i < n; i++)
        table[i] = str[i] - ‘0‘;

    tmp = table[0];
    old_record = record1;
    curr_record = record2;

    for(int i = 0; i < n; i++){
        if(table[i] >= tmp)
            old_record[i] =  table[i] - tmp;
        else
            old_record[i] =  10 + table[i] - tmp;
    }
    for(int i = 1; i < n; i++){
        tmp = table[n - 1];
        memmove(table + 1, table, sizeof(int) * (n - 1));
        table[0] = tmp;

        int flag  = 0;  /*curr < old ? 1 : 0*/

        for(int j = 0; j < n; j++){
            if(table[j] >= tmp)
                curr_record[j] =  table[j] - tmp;
            else
                curr_record[j] =  10 + table[j] - tmp;
            if( 0 == flag ){
                if(curr_record[j] < old_record[j])
                    flag = 1;

                if(curr_record[j] > old_record[j])
                    break;
            }
        }
        if( 1 == flag){
            int *swp_record = old_record;
            old_record = curr_record;
            curr_record = swp_record;
        }
    }
    for(int i = 0; i < n; i++)
            COUT << old_record[i];
    COUT << "\n";
    return 0;
}
时间: 2024-09-30 23:47:56

Codeforces Round #283 (Div. 2) b的相关文章

Codeforces Round #283 (Div. 2) a

/**  * @brief Codeforces Round #283 (Div. 2) a  * @file a.cpp  * @author mianma  * @created 2014/12/18 17:45  * @edited  2014/12/18 17:45  * @type brute  * @note  */ #include <fstream> #include <iostream> #include <cstring> using namespa

构造+暴力 Codeforces Round #283 (Div. 2) B. Secret Combination

题目传送门 1 /* 2 构造+暴力:按照题目意思,只要10次加1就变回原来的数字,暴力枚举所有数字,string大法好! 3 */ 4 /************************************************ 5 Author :Running_Time 6 Created Time :2015-8-3 8:43:02 7 File Name :A.cpp 8 *************************************************/ 9 1

暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns

题目传送门 1 /* 2 题意:删除若干行,使得n行字符串成递增排序 3 暴力+构造:从前往后枚举列,当之前的顺序已经正确时,之后就不用考虑了,这样删列最小 4 */ 5 /************************************************ 6 Author :Running_Time 7 Created Time :2015-8-3 10:49:53 8 File Name :C.cpp 9 ************************************

Codeforces Round #283 (Div. 2) c

/**  * @brief Codeforces Round #283 (Div. 2) c  * @file c.cpp  * @author mianma  * @created 2014/12/22 13:38  * @edited  2014/12/22 13:38  * @type greedy  * @time cost time O(m*n)  * @mem  cost mem  2*MAXN^2 + 2*MAXN  * @note  */ #include <fstream>

Codeforces Round #283 (Div. 2) 题解

A. Minimum Difficulty Mike is trying rock climbing but he is awful at it. There are n holds on the wall, i-th hold is at height ai off the ground. Besides, let the sequence ai increase, that is, ai < ai + 1 for all ifrom 1 to n - 1; we will call such

Codeforces Round #283 (Div. 2)D. Tennis Game

题意:给出比赛情况,输出所有满足条件的s,t,使得这场比赛有结果. 枚举t,然后二分找得分为t的下界,并更新每局的边界,判断谁获得当前局的胜利.最后的时候要注意判断最后一局的赢家是否是整场比赛的赢家. #include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <set> #include <bitset> #include <

CodeForces Round #283 Div.2

A. Minimum Difficulty 题意: 有一个递增序列a,现在要去掉除了第一项和最后一项元素外的某一项,使新数列中相邻元素之差的最大值最小. 分析: 先求出原序列a中,相邻两项元素之差的最大值m. 枚举去掉ai,则新序列相邻元素差的最大值为max{ m, ai+1 - ai },然后记录最小值即可. 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 const int maxn =

Codeforces Round #283 (Div.1) Solution

A 贪心,从第一列开始一旦有不符合就把这列去掉.因为如果符合只可能使后面优势更大. B 枚举t就能找到局面了.因为调和级数的和是logn所以复杂度符合要求. C 将actor和part一起排好序,L小先,R大先,actor先.容易发现排在某个part后面的actor是不可能包含它的.它之后的part对于前面出现actor的L没有要求,于是每个part要尽量节约的使用R,于是找比自己R大最小的.set维护即可. D 题意是两个多边形围绕自己中心同样的角速度顺时针转,问有没有可能撞到.一眼就想到可以

Codeforces Round #283 (Div. 2) D,E

D: 题目大意:两个人进行比赛,我们只知道进行了N局比赛的结果,N局之后有一个人赢得了最终的比赛.1代表第一个人赢,2代表第二个人赢.给你他们的输赢情况,让你求出来怎么安排比赛才能得到这种情况,输出时,先按S排序,如果S相同按照T排序.按顺序输出所有的S,T. 思路:我们可以预处理出来在第几的位置某个人赢了x场. 比如: 8 2 1 2 1 1 1 1 1 我们需要枚举赢k场比赛算赢了一小场,注意最后赢的人一定必须是这一局的胜利者. 枚举k之后我们从0开始向后找比如k = 2, xpos代表1赢