1. 程式人生 > >演算法競賽入門經典(第二版) 習題3-11 換低檔裝置(Kickdown) UVa1588 NEERC2006

演算法競賽入門經典(第二版) 習題3-11 換低檔裝置(Kickdown) UVa1588 NEERC2006

Page 59

題意:給出兩個長度分別為n1,n2且每列高度只為1或者2的長條,需要將它們放入一個高度為3的容器,問容器的最短長度。

思路:兩個字串起始端對齊,分兩個方向移動,得到兩個最短長度,再取較小者即可。此題看似簡單,技巧卻很多,值得思考。


#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cctype>
#include<cmath>
#include<algorithm>
using namespace std;
#define M 110
char s1[M],s2[M];
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%s%s",s1,s2)!=EOF){
        int len1=strlen(s1),len2=strlen(s2),ans1,ans2,cnt1=0,cnt2=0,i=0,j=0;//cnt1,cnt2表示起始位置

        while(i<len1&&j<len2){              //第二個字串左移
            if(s1[i]+s2[j]<'2'+'2') i++,j++;
            else cnt1++,i=0,j=cnt1;
        }
        ans1=len1+len2-i;
        //i恰好能表示鑲嵌的長度,且len為向某一個方向移動的最短長度,因為移動的過程是容器長度遞增的過程
        i=j=0;
        while(j<len1&&i<len2){              //第一個字串左移
            if(s1[j]+s2[i]<'2'+'2') i++,j++;
            else cnt2++,i=0,j=cnt2;
        }
        ans2=len1+len2-i;
        printf("%d\n",ans1<ans2?ans1:ans2);
    }
    return 0;
}


相關推薦

演算法競賽入門經典(第二) 習題3-11 低檔裝置Kickdown UVa1588 NEERC2006

Page 59 題意:給出兩個長度分別為n1,n2且每列高度只為1或者2的長條,需要將它們放入一個高度為3的容器,問容器的最短長度。 思路:兩個字串起始端對齊,分兩個方向移動,得到兩個最短長度,再取較

演算法競賽入門經典(第二)習題3-4

#include<stdio.h> #include<string.h> char s[85]; int main() { while(scanf("%s",s)) { int len=strlen(s); for(int i=

演算法競賽入門經典(第二) 習題3-5 謎題Puzzle UVa227 Finals1993

Page 57 Description 一個5*5的網格中恰好有一個格子是空的,其他格子各有一個字母,四條指令A,B,L,R分別表示將空格上、下、左、右移動。輸入初始網格(以Z結束)和一串指令(以0結束),輸出執行操作後的網格。越界則輸出“This puzzle has n

演算法競賽入門經典 第二 習題5-6 對稱軸 Symmetry uva1595

思路:動用兩個容器,一個容器存下所有座標(vector< pair< int>,int>用pair存下點的x、y座標),另一個容器記錄按縱座標分類的點的橫座標(map< int, set< int> >關鍵字是

演算法競賽入門經典 第二 習題4-1 象棋 Xiangqi uva1589

卡了我一個周,WA到想哭,象棋盤放在臥室一個周沒收起來(┬_┬) 思路:將死,也就是說將向上下左右移動(如果可能的話)均仍被將軍。 我自然的想到了建一個二維陣列模擬棋盤,分別表示某行某列的棋子,然後將將上下左右移動(如果可能的話)後分別判斷是否會被車馬炮

演算法競賽入門經典(第二)-劉汝佳-第三章 陣列與字串 例題+習題17/18

說明 本文是我對第三章題目的練習總結,建議配合紫書——《演算法競賽入門經典(第2版)》閱讀本文。 另外為了方便做題,我在VOJ上開了一個contest,歡迎一起在上面做:第三章contest 如果想直接看某道題,請點開目錄後點開相應的題目!!! 例題

演算法競賽入門經典(第二)-劉汝佳-第八章 高效演算法設計 習題18/28

說明 本文是我對第8章28道習題的練習總結,建議配合紫書——《演算法競賽入門經典(第2版)》閱讀本文。 另外為了方便做題,我在VOJ上開了一個contest,歡迎一起在上面做:第八章習題contest 如果想直接看某道題,請點開目錄後點開相應的題目!!!

習題2-4 子序列的和subsequence 演算法競賽入門經典 第二

#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main

演算法競賽入門經典第二習題

習題2-1 水仙花數 #include <iostream> #include <cmath> using namespace std; int main() {int a = 0, b = 0, c = 0;for (int i = 100; i <

演算法競賽入門經典(第二)-劉汝佳-第四章 發放救濟金

In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the following strategy. Every da

演算法競賽入門經典(第二)-劉汝佳-第四章 函式與遞迴 發放救濟金Uva133

In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the following st

演算法競賽入門經典第二 2-6排列

        用1,2,3,...,9組成3個三位數abc, def和ghi,每個數字恰好使用一次,要求abc:def:ghi = 1:2:3。按照"abc def ghi"的格式輸出所有解,每行一個解。提示:不必太動腦筋。 原理是遍歷所有數字再進行篩選,優點是簡單容易實

演算法競賽入門經典習題3-11 抵擋裝置

《演算法競賽入門經典》 習題3-11 換抵擋裝置 給出兩個長度分別為n1,n2(n1,n2<=100)且每列高度只為1或2的長條。需要將它們放入一個高度為3的容器,問能夠容納它們的最短容器的長度。 Input The input file contains several test

演算法競賽入門經典第二部分基礎篇

第6章資料結構和基礎 指標的連結串列實現方式是,當前節點的next指向下一個節點,用陣列模擬就是 for(int i=next[0];i!=0;i=next[i]) i=next[i];就是一條鏈。 你有一個破損的鍵盤。鍵盤上的所有鍵都可以正常工作,但有時Home鍵或

演算法競賽入門經典第三章3-4 Periodic Strings UVA

#include<iostream> #include<string> using namespace std; bool pd(string &s,int k)

UVA-1588 紫書習題3-11抵擋裝置

大致題意:給你連個長度分別為n1,n2且每列高度只為1或2的長條,然後將他們拼在一起,高度不能超過3,問他們拼在一起的最短長度。    Sample Input 2112112112 2212112 12121212 21212121 2211221122

演算法競賽入門經典第二第三章陣列和字串習題3-4週期串

如果一個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如abcabcabc以3為週期(注意,它也以6和12為週期)。輸入一個長度不超過80的字串,輸出其最小週期 #include<stdio.h> int main() { char a[100];

演算法競賽入門經典第二第三章陣列和字串習題3-3數數字

把前n(n<=10000)個整數順次解除安裝一起:123456789101112…數一數0~9各出現多少次(輸出10個整數,分別是0,1,…,9出現的次數) #include<stdio.h> #define N 100000 char s[N],temp[10]; i

演算法競賽入門經典第二第三章陣列和字串習題3-2分子量

給出一種物質的分子式不帶括號,求分子量。本題中的分子式只包含4種原子分別為CHON,原子量分別為12.01,1.008,16.00,14.01(單位g/mol)。例如,C6H5OH的分子量是94.108g/mol #include <stdio.h> int main() {

演算法競賽入門經典第二第三章陣列和字串習題3-1得分

給出一個由O和X組成的串(長度1-80)統計得分。每個O的得分為目前連續出現的O的個數,X的得分為0。 #include <stdio.h> int main() { int b=0,c=0; int j=1; char a[80]; scan