HDU之演算法初步

2021-09-27 07:59:42 字數 2669 閱讀 1399

sort函式在c++的algorithm庫

sort(addr1, addr2, cmp);

>表示從大到小排序,《表示從小到大排序

struct s ;

bool cmp(s s1, s s2)

s ss[n];

sort(ss, ss+n, cmp);

#include#include#includeusing namespace std;

struct node

a[50000];

bool cmp(node a,node b)

else if(p==q)

else

} sort(a,a+n,cmp);

for(int i=0;iusing namespace std;

int hash[2000010];

int main()

else

} return 0;

}//(1)將方程式寫成a * x1 * x1 + b * x2 * x2 = - (c * x3 * x3 + d * x4 * x4)的形式;

//(2)使用hash命名陣列會編譯錯誤,所以命名為hash;

//(3)50 * 100 *100 + 50 *100 *100=1000000,所以hash陣列至少要2000000;

//(4)a * x1 * x1 + b * x2 * x2最小為-1000000,所以陣列要加上1000000的偏移量,以保證陣列下標最小為0,而不是負數;

//(5)因為正負號不同不影響平方的效果,所以只列舉正數,最後乘以2的4次方(16),表示正負不同的組合。

二分查詢針對的是乙個有序的資料集合,查詢思想有點類似分治思想。

每次都通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間被縮小為 0。

int binarysearch(int a,int left,int right,int x)

return -1;

}

1.查詢第乙個值等於給定值的元素

//(left,right],初值[0,n]

int solve(int a,int left,int right,int x)

return left;//夾出來

}

2.查詢第乙個大於等於給定值的元素

//[left,right],初值[0,n]

int lower_bound(int a,int left,int right,int x)

return left;//夾出來

}

3.查詢第乙個大於給定值的元素

//[left,right],初值[0,n]

int upper_bound(int a,int left,int right,int x)

return left;//夾出來

快速冪的迭**法

typedef long long ll;

ll binarypow(ll a,ll b,ll m)

a=a*a%m;

b>>=1;//b的二進位制右移一位,即b=b>>1 或 b=b/2

} return ans;

}

#includeusing namespace std;

long long mod=1e9+7;

long long fun(long long a,int b)

return res;

}int main()

printf("%lld\n",ans); }}

//在很多演算法題中,大的數值結果題目都要求對1e9+7取模。

//原因如下:

//1. 1e9+7是10位最小質數。

//2. 1e9+7相加不爆int(-2147483648~2147483647:10位),

//相乘不爆long long(-9223372036854775808~9223372036854775807:十九位),

//大數mod 1e9+7可以保證數值在永遠在int內。

//大數相乘的時候,因為(a∗b)%c=((a%c)∗(b%c))%c,

#include#includeusing namespace std;

int a[110],b[10010];

int main()

if(a[1]==0&&a[2]==0)

b[++ed]=num;//上一行作為尾端

for(int j=l;j>=1;j--)

}} ans-=2*m;//去掉段首

ans-=num;//去掉尾段尾

sort(b+1,b+ed+1);//至少... 故要排序

for(int i=ed;i>=ed-m+2;i--)

ans-=b[i];

printf("%d\n",ans);

} return 0;

}

演算法初步之排序

對輸入的n個數進行排序並輸出。輸入的第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。可能有多組測試資料,對於每組資料,將排序後的n個整數輸出,每個數後面都有乙個空格。每組測試資料的結果佔一行。5 5 4 3 1 21 2 3 4 5 include int main else pri...

演算法筆記 演算法初步之排序

壹.直接插入排序 自己的理解 插入排序是將陣列當成摸牌 1.預設的將第一張牌a 0 認為已經在手上了,從i 1開始摸牌,暫時放在temp裡,即temp a i 2.j i表示當前放在temp裡的牌應該放的位置,即a j 為了確定是哪一張牌應該放在這個位置,需要用temp與a j 1 當前應該放的位置...

演算法筆記之貪心初步

題目描述 某市計程車計價規則如下 起步4公里10元,即使你的行程沒超過4公里 接下來的4公里,每公里2元 之後每公里2.4元。行程的最後一段即使不到1公里,也當作1公里計費。乙個乘客可以根據行程公里數合理安排坐車方式來使自己的打車費最小。例如,整個行程為16公里,乘客應該將行程分成長度相同的兩部分,...