UVA11111- Generalized Matrioshkas

來源:互聯網
上載者:User

題意:嵌套娃娃,在裡層的娃娃的尺寸要小於外層的娃娃,有可能一個娃娃裡面有多個娃娃,而這多個娃娃尺寸和要小於外層的,相當與匹配括弧的加強版,有些但疼。

思路:要多容量大小是否足夠的判斷,小看了別人的一些思路,自己寫了代碼。下面的核心代碼是deal函數,用的是錯位的方法(個人覺得),同一top的sum[top]和stack[top],其實是sum[top]是在stack[top]內層的容量,比如-5 -3 3 5,sum[0] = 5,stack[1] = -5,sum[1] = 3,stack[2] = -3。這樣就可以判斷是否有足夠的容量裝多個娃娃。(感覺還是有點抽象的樣子,自己在草稿紙上寫寫就會明白了。。。)

#include<stdio.h> #include<string.h>#include<math.h>#include<algorithm>using namespace std;#define N 1000000int arr[N], stack[N], sum[N];int deal(int *a, int n) {int top = 0;memset(stack, 0, sizeof(stack));memset(sum, 0, sizeof(sum));哦for(int i = 0; i < n; i++){if(a[i] < 0) {  sum[top] -= a[i];//記錄每一層的容量  }  else {  if(-stack[top] != a[i])//判斷正數是否與棧頂的元素和為0return 0;   if(sum[top] >= a[i])//每一個進行判斷的正數,要求要比內層的容量大return 0;  stack[top] = 0;//元素出棧sum[top--] = 0;//當元素出棧時,其相應的容量要清零}}return 1;}int main() {int cnt = 0;char ch;while (scanf("%d", &arr[cnt++]) != EOF) {int flag = 0;ch = getchar();if (ch == '\n') {if (cnt % 2 == 1)flag = 0;elseflag = deal(arr, cnt);if (flag)printf(":-) Matrioshka!\n");elseprintf(":-( Try again.\n");cnt = 0;}}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.