GDUT 2016校賽決賽

2021-07-11 02:54:38 字數 1254 閱讀 8127

用max1[money]來表示花費money在頭盔和首飾上能得到的最優值,故列舉a,列舉b,列舉a[i]+b[j]的a*b種情況。(因為b和a可能有依賴關係)

用max2[money]來表示花費money在單手和雙手上能得到的最優值,故列舉c兩兩相加的c*(c-1)種情況,再列舉d即可

max1,max2都遍歷1-m,若max[i]

ac**:

#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

#define min(a,b) (a>b?b:a)

#define max(a,b) (a>b?a:b)

#define mem(a,num) memset(a,num,sizeof(a))

int t,m,a,b,c,d;

struct node

;struct flag

;int main()

for(int i=0;i>bb[i].money>>bb[i].atk>>b2[i].id>>b2[i].buff;

max1[bb[i].money]=max(max1[bb[i].money],bb[i].atk);

}for(int i=0;i>cc[i].money>>cc[i].atk;

for(int i=0;i>dd[i].money>>dd[i].atk;

max2[dd[i].money]=max(max2[dd[i].money],dd[i].atk);

}for(int i=0;i

思路:在中序遍歷序列中,如果#對應葉子節點,那麼相鄰的必然是非葉子節點,故只要存在連續的#就可以判定為no了,特判一下只有乙個節點的情況.為#就是no了....

思路:左右夾逼,如果可以積水必然是高度以左右較小的高度來積水,如果夾逼過程遇到比當前大的,就更新當前值,重新比較左右兩端的值,反覆如此.....結果記得用long long存

ac**:

#includeusing namespace std;

typedef long long ll;

const int maxn = 1e6+5;

int a[maxn];

int main()

l=i;

}else

r=i;}}

cout<

1、ai%aj==0  -> 去掉ai

2、dfs+lcm容斥,且lcm>n則return;

GDUT 2016新生賽D題 有趣的遊戲

巴什博弈 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m...

2017gdut校賽初賽題解

解析 標準簽到題,o 直接輸出accept,a不大寫的人不知道什麼心態 include include include include include include include include include include include using namespace std int ma...

ZJUT 2012校賽決賽 塗顏色

塗顏色 time limit 2000ms memory limit 32768k 有n個未塗色的球,編號1到n。現在要給它們塗色。已知有m種顏料,每種顏料剩餘量不一,因此每種顏料能夠塗的球的個數是不同的,令它們是c1,c2,cm。問有多少種給所有球上顏色的方案。多組資料。每組資料第一行兩個整數n,...