注意:公式推導n方的前n項和:n(n+1)(2n+1) / 6
除法的取餘::逆元
mod必須是乙個素數
#include
using
namespace std;
typedef
long
long ll;
ll ans =0;
const ll mod =
998244353
;ll fast
(ll a,ll b)
return res;
}int
main()
return0;
}
我用的是樹狀陣列維護孿生質數的個數,快速冪求解。注意底數可能超過1e9,因為n取最大時,n*(n+1)等於1e14,快速冪需要修改一點點,我就是這點一直卡著,快速冪底數要再取一次模。
#include
using
namespace std;
typedef
long
long ll;
const ll n =
1e7;
const ll mod =
1e9+7;
const
int maxn =
1e7+5;
int primes[maxn]
;ll sh[maxn]
,tr[maxn]
;void
get_prime
(ll n)}}
ll fast
(ll a,ll b)
return res;
}ll mul
(ll a,ll b)
return res;
}void
update
(ll a,ll b)
ll query
(ll x)
intmain()
while
(_--
)return0;
}
思維題
交點分為兩類:
第一類為兩個相鄰圓之間的交點
個數為2(a(b+1)+b(a+1))
因為兩個圓之間有兩個交點,橫排有,豎排也有這種形式
第二類可以發現為圓心
總個數為(a+1)(b+1)
因為蛋糕是一層一層的,所以只要找到座標距離邊界最短的距離即可,最後在乘k就行了
只要找到最近距離就行了。
#include
using
namespace std;
typedef
long
long ll;
ll x,y,n,q,k;
ll ans;
intmain()
return0;
}
經典的區間貪心:求最大重合區間的長度。(必須要會)
將每個區間進行排序,排序規則為:按x從小到大排序,x相等時,y小的在前。
思路:初始化td儲存前乙個選中的編號,cure儲存前乙個選中的區間末尾的y。
從第2個區間開始如果重合區間長度更新,就更新結果id1和id2,ans
如果當前的y座標大於前乙個的末尾座標,就要更新cure和td,td為當前的編號(因為到下一次迴圈時,td就變成前乙個選中的編號了),結尾座標也更新為當前的末尾座標。
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
1e5+5;
pair
>p[maxn]
;//存編號和區間的x和y
bool
cmp(pair
>a,pair
>b)
void
solve()
sort
(p+1
,p+1
+n,cmp)
;// cout
.first,id2=p[2]
.first,cure=p[1]
.second.second;
ll ans =
0,cur =
0,td=p[1]
.first;
// cout
(int i=
2;i<=n;i++)}
if(p[i]
.second.second>=cure)
} cout<
" "<
" "<
'\n';}
intmain()
西南科技大學OJ題 迴圈佇列0965
迴圈佇列 根據給定的空間構造順序迴圈佇列,規定隊滿處理方法為少用乙個元素空間。例如,給定5個元素空間構造迴圈佇列,則只能存放4個元素。試根據入隊及出隊操作判斷佇列最後的元素存放情況,並輸出最後佇列中的元素值,即完成給定入隊及出列操作後一次性全部出隊的元素值。要求採用順序佇列完成,少用乙個儲存空間的方...
西南科技大學OJ題 逆置單鏈表0957
逆置單鏈表 建立長度為n的單鏈表,然後將其資料元素逆置,即第1個元素變為最後乙個元素,第2個元素變為倒數第2個元素,以此類推,最後乙個元素變為第1個元素。處理的資料型別為字元型。必須使用鍊錶完成。輸入第一行為鍊錶長度n 第二行為鍊錶中的n個資料元素的值。輸出 逆置後的原始的值。樣例輸入 10 abc...
西南科技大學OJ題 哈夫曼解碼0986
哈夫曼解碼 1000 ms 10000 kb 1974 4142 通常要求根據給定的編碼本對密文進行解碼。現已給定相應字元的哈夫曼編碼,要求根據編碼對密文進行解碼。建立哈夫曼樹以及編碼 主函式等都已經給出,你只需要填寫解碼函式void ccode haffnode hafftree,int n 即可...