2018計蒜之道 初賽 第二場

2021-08-19 23:36:37 字數 2627 閱讀 4823

a.**推薦系統

直接暴力dp就行

.....**賽後沒儲存orz....找不到了

b.阿里巴巴的手機**商(簡單)

直接拿map暴力就行

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define long long long

const int inf=0x3f3f3f3f;

const long mod=1e9+ 7;

const double pi=acos(-1.0);

#define clri(x) memset(x,-1,sizeof(x))

#define clr0(x) memset(x,0,sizeof x)

#define clr1(x) memset(x,inf,sizeof x)

#define clr2(x) memset(x,-inf,sizeof x)

#define eps 1e-10

#define lson l , mid , rt<< 1

#define rson mid + 1 ,r , (rt<<1)+1

#define root 1, m , 1

mapmp ;

int main()

cout<

c.阿里巴巴的手機**商(中等)

把字串倒著插到字典樹裡面,注意單詞和字尾是不一樣的,即delete操作和query,update操作的區別

然後換字尾的時候:

1、把字尾str1的兒子和當前字尾str1的資訊記錄;

2、刪去它的所有兒子並且清空對應的資訊;

3、把(1)中記錄的資訊和兒子賦給字尾str2;

注意上面的順序不能打亂,不可以先賦給str2再清空,因為存在str1是str2的乙個字尾的情況,如update cd abcd

細節還是有點繁瑣的:

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std ;

#define long long long

const int inf=0x3f3f3f3f;

const long mod=1e9+ 7;

const double pi=acos(-1.0);

#define clri(x) memset(x,-1,sizeof(x))

#define clr0(x) memset(x,0,sizeof x)

#define clr1(x) memset(x,inf,sizeof x)

#define clr2(x) memset(x,-inf,sizeof x)

#define eps 1e-10

#define lson l , mid , rt<< 1

#define rson mid + 1 ,r , (rt<<1)+1

#define root 1, m , 1

struct node

}l[1000000+11];

int tot = 0;

void insert(char a , long val )

l[now].tag += val ;

}long query_tag(char a)

return l[now].tag ;

}int creattrie(char a , long val )

l[nextt].cnt += val ;

now = nextt;

}return now ;

}void update(char a , long val )

l[now].tag -= val ;

}long query( char a )

return l[now].cnt;

}void change(char a , char b )

int main()

else if(op[0] == 'd')

else if(op[0] == 'q')

else

if(res2 >= 1 || query_tag(str2) >= 1)

change(str1,str2) ;}}

for(int i = 0 ;i <= tot ; ++ i)l[i].init() ;

}}

d.阿里巴巴的手機**商(困難)

資料範圍和基本操作跟中等版本一樣,多出了乙個查詢歷史版本的操作,應該是把trie樹用可持久化trie去替代就行了:

insert :每次更新一條鏈;

delete :同上;

update:每次更新2條鏈,把字尾str1和str2的鏈都更新了;

query:直接查詢當前版本;

vquery: 當前的版本往後退,然後查詢就行了;

(理論ac,日常口胡,然而**並沒有打完,資料結構能力低下的一匹.....orz。)

2018 計蒜之道 初賽 第二場

簽到完看到c沒什麼人過就溜樂。a.的推薦系統 直接dp,時間複雜度 o nd include using namespace std define rep i,a,b for int i a i b i define dec i,a,b for int i a i b i define mp mak...

2018 計蒜之道 初賽 第二場 A B

小明剛剛入職 老大給他交代了乙個簡單的任務,實現乙個簡易的商品推薦系統。一共有 n n 件商品可以被推薦,他們的編號分別為 1 1 到 n n。每件商品都有乙個 編號為 i i的商品 為 p ipi 元。現在需要給使用者推薦盡可能多的商品,但是要保證按照編號上公升的順序給使用者依次推薦商品,並且,相...

2019 計蒜之道 初賽 第二場 矩陣求值

題目背景題目描述 乙個同學 lsq 在小課堂後對矩陣產生極大的感興趣,他想到了乙個對矩陣求和的問題,但是這個矩陣實在太大了,他算不過來,你能幫幫他嗎?這個矩陣長這個樣子,其右方和下方是沒有邊界的,但是不要擔心,他並不要求你對整個矩陣求和,他只想知道,第 a 行第 c 列的格仔為左上,第 b 行第 d...