UVALive 6770 - Baggage (构造)

UVALive6770 ACM ICPC 2014 world finals problem A 构造。 题解传送门: problem a ACM ICPC 2014 solution to problem A - baggage here (需要科学上网) 这题的构造方法。 首先要手算出n=3,4,5,6,7 的解。 然后由n的解,可以推出n+4的解,然后递推一发。 比如 __BABA (BA)^n BABA ABBABA (BA)^n B__A ABBA__ (BA)^n BBAA -> ABBA A^n B^n BBAA AA A^n B^n BBBBAA AAAA A^n B^n BBBB 这样就可以由n的解放,推广到n+2的解放。 除了n=3外,其余的都是往左移动了两格的。

/* ***
Author :kuangbin
Created Time :2015/4/21 16:31:24
File Name :UVALive6770.cpp
************************************************ */

#include <stdio.h>

#include <string.h>

#include

#include

#include

#include

#include

#include

#include

#include <math.h>

#include <stdlib.h>

#include <time.h>
using namespace std;

vector<pair<int,int> >vec[110];

int main()
{
//freopen(“in.txt”,”r”,stdin);
//freopen(“out.txt”,”w”,stdout);
vec[3].push_back(make_pair(2,-1));
vec[3].push_back(make_pair(5,2));
vec[3].push_back(make_pair(3,-3));

vec\[4\].push\_back(make\_pair(6,-1));
vec\[4\].push\_back(make\_pair(3,6));
vec\[4\].push\_back(make\_pair(0,3));
vec\[4\].push\_back(make\_pair(7,0));

vec\[5\].push\_back(make\_pair(8,-1));
vec\[5\].push\_back(make\_pair(3,8));
vec\[5\].push\_back(make\_pair(6,3));
vec\[5\].push\_back(make\_pair(0,6));
vec\[5\].push\_back(make\_pair(9,0));

vec\[6\].push\_back(make\_pair(10,-1));
vec\[6\].push\_back(make\_pair(7,10));
vec\[6\].push\_back(make\_pair(2,7));
vec\[6\].push\_back(make\_pair(6,2));
vec\[6\].push\_back(make\_pair(0,6));
vec\[6\].push\_back(make\_pair(11,0));

vec\[7\].push\_back(make\_pair(12,-1));
vec\[7\].push\_back(make\_pair(5,12));
vec\[7\].push\_back(make\_pair(8,5));
vec\[7\].push\_back(make\_pair(3,8));
vec\[7\].push\_back(make\_pair(9,3));
vec\[7\].push\_back(make\_pair(0,9));
vec\[7\].push\_back(make\_pair(13,0));

for(int i = 8;i <= 100;i++){
    vec\[i\].push\_back(make\_pair(2*i-2,-1));
    vec\[i\].push\_back(make\_pair(3,2*i-2));
    for(int j = 0;j < i-4;j++)
        vec\[i\].push\_back(make\_pair(vec\[i-4\]\[j\].first+4,vec\[i-4\]\[j\].second+4));
    vec\[i\].push\_back(make\_pair(0,2*i-5));
    vec\[i\].push\_back(make\_pair(2*i-1,0));
}
int n;
bool first = true;
while(scanf("%d",&n) == 1){
    if(first)first = false;
    else printf("\\n");
    for(int i = 0;i < n;i++)
        printf("%d to %d\\n",vec\[n\]\[i\].first,vec\[n\]\[i\].second);
}
return 0;

}

------ 本文结束------
  • 本文作者: kuangbin
  • 本文链接: 589.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
0%