xxx

【收藏】
阶乘计算升级版
https://pintia.cn/problem-sets/14/problems/742

求自定类型元素序列的中位数
https://pintia.cn/problem-sets/14/problems/743

 

【string stream】
string str[1005];
stringstream ss(s); //取消单词之前的空格
while(ss >> s){
str[cnt++]=s;
}

【字符串插入】
s.insert(i," "); //对每个非字母和数字之前加空格
i++;

【大小写转换】
toupper(char)
tolower(char)

【字母数字判断】
isalnum(char)

质数 > 5,要么6 X + 1 / 6 x - 1

2^31 int 范围


【前导0】
%02d

【素数】
1不是,2是
for(int i = 2;i <= n / i;i++){
//check
}

【最大公因数】
int gcd(int a,int b){
return b == 0 ? a : gcd(b,a % b);
}

【快速进制转换】
#include <iostream>
using namespace std;
int main() {
int a;
cout<<"16进制输入:";
cin>>hex>>a;
cout<<"16进制转10进制:"<<a<<endl;
cout<<"以16进制输出:"<<hex<<a<<endl;

cout<<"8进制输入:";
cin>>oct>>a;
cout<<"8进制转10进制:"<<a<<endl;
cout<<"以8进制输出:"<<oct<<a<<endl;
}

【STL中插入pair】
std::ios::sync_with_stdio(false);
map<string,string> m;
m.insert(pair<string,string>("ChuiZi","Bu"));
m.insert(pair<string,string>("Bu","JianDao"));

【STL遍历】
std::ios::sync_with_stdio(false);
map<string,string> m;
m.insert(pair<string,string>("ChuiZi","Bu"));
m.insert(pair<string,string>("Bu","JianDao"));
for(map<string,string>::iterator it = m.begin();it != m.end();it++){
cout << it->first << " " << it->second << endl;
}


【set】
set.count() 没有找到就是0,找到就是1

【sort 降序】
sort(v.begin().v.end(),greater<int>());

【map 初始化】
map[123] = 'ID';

【哈夫曼树---优先队列】
//优先队列实现哈夫曼树
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct cmp{
bool operator ()( int &a, int &b){
if(a!=b)
return a>b;
}
};
int main(){
int n;
int a;
cin>>n;
priority_queue<int,vector<int>,cmp> pq;//法一
for(int i=0;i<n;i++){
cin>>a;
pq.push(a);
}
int val=0;
while(pq.size() > 1){
int min1=pq.top();
pq.pop();
int min2=pq.top();
pq.pop();
min1+=min2;
val+=min1;
pq.push(min1);
}
cout<<val<<endl;
return 0;
}

 

【素数=质数】
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数

约数,又称因数


【筛质数】
#include<stdio.h>
#include<iostream>
using namespace std;
const int N = 1e6+5;
int prime[N];
bool st[N];
int cnt = 0;
void get_prime(int n){
//争取把每一个合数用他的质因子筛掉即可
for(int i = 2;i <= n;i++){
if(!st[i])
prime[cnt++] = i;
for(int j = 0; prime[j] <= n / i;j++){
st[prime[j] * i] = true;
if(i % prime[j] == 0)
break;
}
}
}

int main(){
int n;
cin >> n;
get_prime(n);
cout << cnt <<endl;
return 0;
}


【快速幂】
#include<iostream>
using namespace std;
typedef long long ll;
ll mod(ll x,ll y,ll k){
if(y == 0) return 1 % k;//特判
if(y == 1) return x % k;
ll r = mod(x,y / 2,k);
if(y % 2 == 0){
return r* r % k; //奇偶判断
}else{
return ((r*r)%k)*x % k;
}
}
int main(){
int n;
cin >> n;
while(n--){
ll x,y,k;
scanf("%lld %lld %lld",&x,&y,&k);
x = x % k;
printf("%lld\n",mod(x,y,k));
}
return 0;
}


【试除法求约数】
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

vector<int> get(int n){
vector<int> s;
for(int i = 1; i <= n / i; i++){
if(n % i == 0){
s.push_back(i);
//如果 i 是n的约数,那么 n / i 也是 n的约数
if(i != n / i){
s.push_back(n / i);
}
}
}
sort(s.begin(),s.end());
return s;
}

int main(){
int n;
scanf("%d",&n);
while(n--){
int a;
cin >> a;
auto ss = get(a);
for(auto i : ss) {
cout << i <<' ';
}
puts("");
}
return 0;
}


【约束个数】
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
const int mod = 1e9+7;
int main(){
int n;
cin >> n;
unordered_map<int,int> h;
int a;
while(n--){
cin >> a;
for(int i = 2;i <= a / i;i++){
while(a % i == 0){
h[i]++;
a = a / i;
}
}
if(a > 1)
h[a]++;
}
long long ans = 1;
for (auto i : h){
ans = ans * (i.second + 1) % mod;
}
cout << ans;

return 0;
}

 

【约数之和】
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
const int mod = 1e9+7;

int main(){
int n;
int a;
cin >> n;
unordered_map<int,int> h;
while(n--){
cin >> a;
for(int i = 2;i <= a / i;i++){
while(a % i == 0){
h[i]++;
a = a / i;
}
}
if(a > 1)
h[a]++;
}
long long ans = 1;
for(auto i : h){
int p = i.first; // p 为底数,q为指数 求 (p1^0 +..+ p1^x)*(....)*(pk^0+...+pk^x)
int q = i.second;
long long t = 1;
while(q--){
t = (t * p + 1) % mod;
}
ans = ans * t % mod;
}
cout << ans;
return 0;
}

posted @ 2020-11-28 11:07  远征i  阅读(357)  评论(0编辑  收藏  举报