成都網路賽 hdu 4288 4291 4296

2021-06-09 13:47:13 字數 1507 閱讀 8322

成都網路賽結束了,還好我們這種渣渣學校拿到了個名額……

hdu 4288  coder

這題開始我還想想用stl 來做,發現每次都要隔5個數加和,這樣統計的操作變成線性了,不行……然後想到線段樹,發現線段樹就很好做,每個點統計改點區間內mod 5的 5個和,在統計區間內元素的個數,然後就可以很方便的進行區間合併了…… 事先要離散化

#include #include #include #include #include #include using namespace std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef long long ll;

const int maxn=100010;

struct node

sum[maxn<<2];

int num[maxn<<2],tab[maxn],a[maxn];

char ord[maxn][10];

void build(int l,int r,int rt)

void pushup(int rt)

void update(int p,int val,int l,int r,int rt)

int m=(l+r)>>1;

if(p<=m) update(p,val,lson);

else update(p,val,rson);

pushup(rt);

}int bin(int key,int l,int r)

}int main()

; for(int i=0;i<2;i++)

for(int j=0;j<2;j++)

for(int k=0;k<2;k++)

tmp[i][j]=(tmp[i][j]+c1[i][k]*c2[k][j])%mod;

memcpy(c1,tmp,sizeof(tmp));

}ll a[2][2],b[2][2];

ll get(ll n,ll mod)

int main()

return 0;

}

hdu 4296  buildings

這題能搞出來覺得有點搞笑,自己完全不知道怎麼搞出來的……只是感覺要貪心而且要排序,然後排序函式怎麼寫自己是死活推不出來,然後就抱著試試態度各種寫比較函式,然後各種wa,之後竟然試出來了,看來就是小號的力量,太沒有節操了開小號鄙視自己

#include #include #include #include #include #include using namespace std;

const int maxn=100010;

struct node

node[maxn];

int cmp(node a,node b)

int main()

{ int n;

while(scanf("%d",&n)==1)

{for(int i=0;i

成都賽區網路賽 hdu 4292 food

題目 給出n個人喜歡的飲料種類以及食物種類,每個人只能取其中一種且數量為1,現在給出有f中食物以及d種飲料,以及他們各自的數量,問如何安 排食物以及飲料,使得最多的人得到乙個食物以及一瓶飲料 題目類似poj3281 dining 只是那題目每個種類都只有數量1 所以這道題目就只用才起點建邊和終點建邊...

hdu 4288 2012成都網路賽

線段樹學的遠遠不夠啊,網路賽的時候一直不知道怎麼做,後來看了大神報告,才學了一下。線段樹每個節點 記錄 sum 0.5 即位置mod 5 的5種結果的數對應的和。cnt記錄區間有多少個數。更新的時候 只要把對應子區間的sum i 加起來就可以了 include includeusing namesp...

hdu4111 成都現場賽A題

題意 有n堆石子,每堆石子有乙個數目,現有兩個人博弈,每個人每次可以進行兩個操作中的乙個 1 從某堆拿掉乙個石子 若某堆石子為0了,那麼這堆就不存在了 2 合併兩堆石子 沒有操作的就輸。問是哪個贏 思想 如果每堆石子數都大於1,那麼最後結果肯定相當於所有的堆合併成一堆後,然後再乙個乙個拿掉的結果。因...