成都網路賽結束了,還好我們這種渣渣學校拿到了個名額……
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,那麼最後結果肯定相當於所有的堆合併成一堆後,然後再乙個乙個拿掉的結果。因...