**題意:**輸入n,a,b。再輸入n個數p1,p2,…pn。有兩個集合a和b,這n個數中如果x屬於集合a,a-x也必須屬於集合a;如果x屬於集合b,b-x也必須屬於集合b。如果能分為兩個集合的話,輸出「yes」並輸出每個元素屬於集合a還是b,0表示屬於集合a,1表示屬於集合b。
**思路:**先假設存在一種合理的方案,即任意乙個x,一定屬於集合a和b中的乙個。如果最後結果合理集合a、b應該沒有交集。設n+1和n+2分別為集合a和b的根節點。用乙個map儲存元素對應的下標。
對於任意乙個x,如果a-x不存在,則x一定屬於集合b,把x下標和集合b(即n+2)並起來;如果b-x也不存在,則x又一定屬於集合a,把x下標和集合a(即n+1)並起來,此時集合a,b並了起來,不合理。
對於任意乙個x,如果a-x存在,則把x和a-x下標並起來,此時x不一定屬於集合a,因為可能存在n=2,a=8,b=20 4,16的資料。只有當b-x不存在時,才能把x的下標和a並起來。
如果b-x也存在,就把x和b-x的下標也並起來,此時如果x!=a-x!=b-x時,說明集合a和b公用x,顯然不合理。此時如果x==a-x!=b-x,顯然應屬於集合b。特例就是a和b相等,此時任何分組都可以。
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int fa[
100010
],p[
100010];
int n, a, b, x, fx, fy;
map<
int,
int>mp;
intfind
(int x)
void
baba
(int x,
int y)
intmain()
for(
int i =
1; i <= n; i++
)int fx =
find
(n +1)
;int fy =
find
(n +2)
;if(fx == fy)
printf
("yes\n");
for(
int i =
1; i <= n; i++
)}
**題意:**第一行輸入m,n。接下來m行每行的第一位輸入si,後跟si個數為下標值。這si個數字的lcm(輸入的si個數字) > lcm(ai序列中剩餘的n-si個數字)。判斷是否存在這個ai序列。
**思路:**假設a是b 的子集,那麼一定存在 lcm(b)≥lcm(a)lcm(b) 。反證法,某行輸入集合di,補集為si,再取另一行集合為dj,補集為sj。假設di和dj的交集為空,那麼dj一定為si的真子集,同理,di也是sj的真子集,那麼:lcm(di)>lcm(si)>=lcm(dj)>lcm(sj)>=lcm(di)。顯然產生矛盾。結論:任意兩行的集合d都必須有交集。
#include
#include
#include
#include
#include
#include
using
namespace std;
int m, n, s, x, flag;
bool vis[
10010][
10010];
intmain()
}for
(int i =
1; i <= m; i++)if
(flag ==0)
}}printf
("possible");
}
1月13日OTS公升級公告
尊敬的使用者 您好,阿里雲ots將於2014年1月13日20 00 24 00進行服務端系統熱公升級。公升級期間影響如下 1 使用者訪問 ots服務延遲有可能公升高,會有萬分之一的錯誤率,可重試。2 分鐘內錶級別不可寫操作,可重試。主要變更包括 系統優化 預留讀寫吞吐量在單錶多分片情況下的分配優化,...
2023年1月13日實習日誌
其中學到的最有用的一點應該就是多條件查詢的處理方法了。從圖中可以看出來,我們需要根據 時間,狀態,模組,站點 來查詢符合條件的資料。按我們之前的思路來考慮,查詢應該通過get方式傳遞資料。而get會顯示在url上,這樣如果單條件或是少數條件的話,是可以接受的,但是如果查詢條件太多的話,會導致url特...
日誌11月13日
12月11日就要靠2級了,做了幾套真題,代嗎如下 class student def index self name none age none gender none english none mathematics none chinese none deftotal points self p...