從入門到頭禿週末休閒賽37誠實的人

2021-10-24 08:16:14 字數 1229 閱讀 7465

題目鏈結

題目大意:有n個人,這些人分成兩部分:1.誠實的,他說的話全是真實的。2.不友善的,他說的話可能是真也可能是假。

每個人說了ai句話:第i個人的第j句話是:x是y的,其中x表示乙個人的編號,y是1或者0,表示誠實和不友善。現在問最多可能有多少人是誠實的。

解題思路:

看到了n的範圍小於15,考慮二進位制列舉出所有情況,然後分別加以判斷。

例如有五個人,其中一種二進位制列舉出的情況是00110,那麼我們只需要判斷第三和第四個人說的話是否矛盾即可,其餘的人可以直接跳過。

判斷思路:

如果a說x是誠實的,但是b說x是不友善的,那麼當前列舉的情況不成立

如果a說x是誠實的,但是x在當前列舉的情況中是不友善的,那麼當前列舉的情況不成立

如果a說x是不友善的,但是x在當前列舉的情況中是誠實的,那麼當前列舉的情況不成立

ac**:

struct node

;vector vec[20]

;//vec[i][j].p表示i的第j句話針對的是p,vec[i][j].y表示i的第j句話說p是y(y=1、0)

int a[20]

;int all[

35000][

20];//2的15次方<35000

int vis[20]

;int

main()

}for

(int i =

1; i <= n; i++))

;}}int ans =0;

for(

int i =

0; i <(1

<< n)

; i++)if

(vec[j]

[k].y &&

!all[i]

[vec[j]

[k].p])if

(!vec[j]

[k].y && all[i]

[vec[j]

[k].p])if

(vec[j]

[k].y)

vis[vec[j]

[k].p]=1

;else

vis[vec[j]

[k].p]=0

;}}if

(!flag)

break;}

if(flag)

}printf

("%d\n"

, ans)

;return0;

}

從尾到頭列印列表

輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。思路一 class solution 返回從尾部到頭部的列表值序列,例如 1,2,3 def printlistfromtailtohead self,listnode write code here arrlist while lis...

從尾到頭輸出節點

題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個節點的值。解題思路 反向輸出,即先進後出,於是可以用棧的特性來實現反向輸出 1.建立乙個節點類listnode 包含節點序號serialnum,和後繼節點next 2.建立節點類listnode的例項讓第二個節點成為第乙個節點的後繼節點,第三個節點...

從尾到頭列印列表

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist 這個題相對簡單,可以用遞迴的方法來做,以下列鍊錶為例,通過遞迴到鍊錶的尾巴 1的下乙個為null 開始返回,即到1時開始向arraylist中新增值,實現時只需將新增值的 放在遞迴語句之後即可。也可以先將鍊錶反轉然後再賦值給arrayli...