别Look,这是代码备份……
2025-11-01 15:23:27
发布于:浙江
头文件:
#include<bits/stdc++.h>
using namespace std;
int main(){
return 0;
}
2025/10/7 - 图的存储进阶
#include<bits/stdc++.h>
using namespace std;
struct node{
int to; //终点
int next; //下一个位置
} edge[20]; //边结构体数组
int head[20]; //链表数组,顶点链表起始值
int cnt; //当前的已加入的边数
void add(int u, int v){ //u->起点,v->终点
//表示新边的结点
edge[++cnt].to = v;
//新结点指向 u 的链表的链头
edge[cnt].next = head[u];
//新结点做为新的链头
head[u] = cnt;
return ;
}
int main(){
//???
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int heap[10010];
int len = 0;
void put(int x){
heap[++len] = x;
int son = len,pa;
while(son > 1){
pa = son >> 1;
if(heap[son] >= heap[pa]) break;
swap(heap[son],heap[pa]);
son = pa;
}
return ;
}
int get(){
int son,res,pa;
res = heap[1];
heap[1] = heap[len--];
pa = 1;
while(pa * 2 <= len){
son = pa * 2;
if(son < len && heap[son + 1] < heap[son]) son++;
if (heap[pa] <= heap[son]) break;
swap(heap[pa], heap[son]);
pa = son;
}
return res;
}
int main() {
//???
return 0;
}
并查集:
#include<bits/stdc++.h>
using namespace std;
int n,m,p,fa[5010],ranks[5010];
int get(int x){
if(fa[x] == x) return x;
return get(fa[x]);
}
int new_get(int x){
if(fa[x] == x) return x;
return fa[x] = new_get(fa[x]);
}
void merge(int x,int y){
fa[get(x)] = get(y);
}
void new_merge(int x,int y){
fa[new_get(x)] = new_get(y);
}
void nnew_merge(int x,int y){
int fx = new_get(x),fy = new_get(y);
if(fx != fy){
if(ranks[fx] > ranks[fy]) fa[fy] = fx;
else {
fa[fx] = fy;
if(ranks[fx] == ranks[fy]) ranks[fy]++;
}
}
}
int main(){
cin >> n >> m >> p;
for(int i = 1;i <= n;i++) fa[i] = i;
while(m--){
int x,y;
cin >> x >> y;
merge(x,y);
}
while(p--){
int x,y;
cin >> x >> y;
if(get(x) == get(y)){
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}
洛谷Lucky Numbers (easy)
#include<bits/stdc++.h>
using namespace std;
bool f(long long x){
int four = 0,seven = 0;
do {
long long s;
s = x % 10;
if(s == 4) four++;
else if(s == 7) seven++;
else return false;
x /= 10;
} while(x);
if(four == seven) return true;
else return false;
}
int main(){
long long n;
cin >> n;
queue<long long> q;
q.push(0);
while(!q.empty()){
if(q.front() >= n && f(q.front())) {
cout << q.front();
return 0;
}
q.push(q.front() * 10 + 4);
if(q.front() >= n && f(q.front())) {
cout << q.front();
return 0;
}
q.push(q.front() * 10 + 7);
if(q.front() >= n && f(q.front())) {
cout << q.front();
return 0;
}
q.pop();
}
return 0;
}
在线IDE:
// //数学知识
// #include <bits/stdc++.h>
// using namespace std;
// // 线性筛
// const int MAXN = 1000005;
// int primes[MAXN];
// bool is_primes[MAXN];
// int cnt = 0;
// void linear_sieve(int n){
// memset(is_primes, true, sizeof(is_primes));
// is_primes[0] = is_primes[1] = false;
// for(int i = 2; i <= n; ++i){
// if(is_primes[i]){
// primes[cnt++] = i;
// }
// for(int j = 0;j < cnt && i * primes[j] <= n; ++j){
// is_primes[i * primes[j]] = false;
// if(i % primes[j] == 0){
// break;
// }
// }
// }
// }
// // 判断是否为A质数
// bool isPrime(int x) {
// if (x < 2) return false;
// for (int i = 2; i * i <= x; i++) {
// if (x % i == 0) return false;
// }
// return true;
// }
// // 质因数分解
// void fjzys(int x) {
// vector<int> factors;
// for (int i = 2; i * i <= x; i++) {
// while (x % i == 0) {
// factors.push_back(i);
// x /= i;
// }
// }
// if (x > 1) factors.push_back(x); // 如果 x 本身是质数
// for (size_t i = 0; i < factors.size(); i++) {
// if (i > 0) cout << " ";
// cout << factors[i];
// }
// cout << endl;
// }
// // 计算最大公约数
// int zdgys(int x, int y) {
// while (y != 0) {
// int temp = y;
// y = x % y;
// x = temp;
// }
// return x;
// }
// // 计算最小公倍数
// void zxgbs(int x, int y) {
// cout << (x / zdgys(x, y)) * y << endl; // 防止溢出
// }
// int main() {
//
// return 0;
// }
// #include<bits/stdc++.h>
// using namespace std;
// const int maxn = 1005;
// int e[maxn][maxn];
// int dis[maxn], vis[maxn];
// void dij(int n,int s){
// //初始化成1e9
// for(int i = 0;i <= n;i++)
// dis[i] = 1e9;
// dis[s] = 0;
// for(int i = 1;i <= n;i++){
// //找当前未访问的路径中最短的点
// int u = 0;
// for(int j = 1;j <= n;j++)
// if(!vis[j] && dis[j] < dis[u]) u = j;
// //将该点设为以访问
// vis[u] = 1;
// for(int j = 1;j <= n;j++){
// //如果这个u和j点互通
// if(e[u][j]) {
// //v为当前点(j)w为当前点(j)与u的值
// int v = j;
// int w = e[u][j];
// //松弛
// if(dis[v] > dis[u] + w)
// dis[v] = dis[u] + w;
// }
// }
// }
// }
// int main(){
// int n,m,s;
// cin >> n >> m >> s;
// //输入
// for(int i = 0;i < m;i++){
// int u,v,w;
// cin >> u >> v >> w;
// //如果为0那么设为1e9(初始化)
// int tmp = e[u][v] ? e[u][v] : 1e9;
// e[u][v] = min(tmp,w);
// }
// dij(n,s);
// //输出
// for(int i = 1;i <= n;i++){
// if(dis[i] != 1e9) cout << dis[i] << ' ';
// else cout << -1 << ' ';
// }
// return 0;
// }
//进制转换
//
// #include<bits/stdc++.h>
// using namespace std;
//
// void ZS_B_D(int n){ // 二进制转十进制(整数)
// int ans = 0,power = 1;
// while(n){
// ans += (n % 10) * power;
// power *= 2;
// n /= 10;
// }
// cout << ans;
// return ;
// }
// void ZS_D_B(int n){ // 十进制转二进制(整数)
// vector<int> ve;
// do {
// ve.push_back(n % 2);
// n /= 2;
// } while(n);
// for(int i = ve.size() - 1;i >= 0;i--){
// cout << ve[i];
// }
// return ;
// }
//
// void XS_D_B(double n,int x){ // 十进制转二进制(小数) n为要转的十进制小数,x为精度(我这边,x = 0就是无精度)
// int zs = (int)n; //整数部分
// double xs = n - zs; //小数部分
// //调用函数,直接处理整数部分
// ZS_D_B(zs);
// cout << ".";//输出小数点
// //处理小数部分
// vector<int> ans2;
// int flag = 0;
// if(x == 0) flag = 1;
// while (xs > 0 && (x == 0 || flag < x)) { //判断小数部分(xs)的小数部分是否为0,与因为我这边,x = 0就是无精度所以这里判断的是是否为无精度与是否已到所需精度
// xs *= 2;
// ans2.push_back((int)xs);
// xs = xs - (int)xs;
// flag++;
// }
// //顺序输出,不需要反转数组
// for(int i = 0;i < ans2.size();i++){
// cout << ans2[i];
// }
// return ;
// }
// void XS_B_D(double n){ // 二进制转十进制(小数)
// int zs = (int)n; //整数部分
// double xs = n - zs; //小数部分
// //调用函数,直接处理整数部分
// ZS_B_D(zs);
// cout << "." << endl;//输出小数点
// //处理小数部分
// string x = to_string(xs);
// int power = -1;
// long double sum;
// cout << pow(2, -8) << endl;
// for(int i = 0;i < x.size();i++){
// if(x[i] == '1') sum += pow(2 , power);
// if(x[i] == '1') cout << pow(2 , power) << endl;
// power *= 2;
// }
// cout << sum;
// return ;
// }
//
// void ZS_B_H(int n){ // 二进制转十六进制(整数)
// vector<int> ve;
// //拆分二进制
// do {
// ve.push_back(n % 10);
// n /= 10;
// } while(n);
// string ans;//存储十六进制的结果
// reverse(ve.begin(),ve.end());//反转数组
// // 补零使位数为4的倍数(高位补零)
// int padLen = (4 - (ve.size() % 4)) % 4;
// for (int i = 0; i < padLen; i++) {
// ve.insert(ve.begin(), 0);
// }
// // 每四位二进制数转成十六进制
// for (int i = 0; i < ve.size(); i += 4) {
// int s = 0;
// for (int j = i; j < i + 4; j++) {
// s = s * 2 + ve[j]; // 二进制转十进制
// }
// if (s < 10) ans += '0' + s;
// else ans += 'A' + (s - 10);
// }
// cout << ans;
// return ;
// }
//
// void ZS_H_O(string n) { // 十六进制转二进制(整数)
// vector<int> ve;
// for (int i = 0; i < n.size(); i++) {
// vector<int> temp;
// int s = 0;
// //转换十六进制字符为数值
// if (n[i] >= '0' && n[i] <= '9') {
// s = n[i] - '0';
// } else if (n[i] >= 'A' && n[i] <= 'F') {
// s = n[i] - 'A' + 10;
// } else if (n[i] >= 'a' && n[i] <= 'f') {
// s = n[i] - 'a' + 10;
// }
// // 转换为二进制(4位),并补零
// do {
// temp.push_back(s % 2);
// s /= 2;
// } while (s > 0);
// while (temp.size() < 4) {
// temp.push_back(0);
// }
// // 合并到结果(逆序,因为低位先插入)
// ve.insert(ve.end(), temp.rbegin(), temp.rend());
// }
// int flag = 1;
// bool hasOutput = false;
// for (int i = 0; i < ve.size(); i++) {
// if (flag == 1&& ve[i] == 0) continue; // 跳过前导零
// flag = 0;
// cout << ve[i];
// hasOutput = true;
// }
// if (hasOutput == false) {
// cout << "0";
// }
// }
//
// void ZS_O_B(long long n){//二进制转八进制(整数)
// vector<long long> ve;
// do {
// ve.push_back(n % 10);
// n /= 10;
// } while(n);
// string ans;
// for(int i = 0;i < ve.size();i += 3){
// long long s = 0;
// int power = 0;
// for(int j = i;j <= min((int)ve.size() - 1,i + 2);j++){
// s += ve[j] * pow(2,power);
// power++;
// }
// ans += s + '0';
// }
// reverse(ans.begin(),ans.end()); //反转数组
// cout << ans;
// return ;
// }
//
// void ZS_B_O(long long n){//八进制转二进制(整数)
// vector<long long> ve;
// do {
// int b = n % 10;
// vector<long long> temp; // 临时存储当前八进制位的二进制
// // 转换当前八进制位为二进制
// do {
// temp.push_back(b % 2);
// b /= 2;
// } while(b);
// // 反转当前位的二进制
// reverse(temp.begin(), temp.end());
// // 补零至3位
// while(temp.size() < 3) {
// temp.push_back(0);
// }
// ve.insert(ve.end(), temp.begin(), temp.end()); //加入二进制数组
// n /= 10;
// } while(n);
// reverse(ve.begin(), ve.end()); // 反转数组
// // 输出结果
// int flag = 1;
// for(int i = 0; i < ve.size(); i++){
// if(ve[i] != 0){
// flag = 0;
// }
// if(flag == 0){
// cout << ve[i];
// }
// }
// return ;
// }
//
// void ZS_D_n(int q, int s){ //十进制转N进制(整数)
// vector<char> ve;
// do {
// if(q > 10 && s % q > 9){
// ve.push_back('A' + s % q - 10);
// } else {
// ve.push_back(s % q + '0');
// }
// s /= q;
// } while(s);
// reverse(ve.begin(),ve.end()); //反转数组
// for(int i = 0;i < ve.size();i++){
// cout << ve[i];
// }
// return ;
// }
//
// void ZS_n_D(int q,string s){ // N进制转十进制(整数)
// vector<int> ve;
// for(int i = 0;i < s.size();i++){
// if(s[i] >= '0' && s[i] <= '9') ve.push_back(s[i] - '0');
// else ve.push_back(s[i] - 55);
// }
// reverse(ve.begin(),ve.end()); //反转数组
// long long ans = 0,power = 0;
// for(int i = 0;i < ve.size();i++){
// ans += ve[i] * pow(q,power);
// power++;
// }
// cout << ans;
// return ;
// }
//
// int main(){
// XS_B_D(1010.001);
// return 0;
// }
//前,中,后缀表达式转换
// #include<bits/stdc++.h>
// using namespace std;
// int z(char s){//值
// if(s == '+' || s == '-') return 1;
// else return 2;
// }
// bool bj(char a,char b){ //判断优先级
// return z(a) >= z(b);
// }
// string zz_qz(string s){ //中缀表达式 转 前缀表达式
// vector<char> ans;
// stack<char> st;
// for(int i = s.size() - 1;i >= 0;i--){
// if(s[i] == ')'){
// st.push(')');
// } else if(s[i] == '('){
// while(st.top() != ')' && !st.empty()){
// ans.push_back(st.top());
// st.pop();
// }
// if(st.top() == ')') st.pop();
// } else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/'){
// while(!st.empty()){
// if(st.top() == ')'){
// break;
// }
// if(bj(st.top(),s[i])){
// ans.push_back(st.top());
// st.pop();
// } else {
// break;
// }
// }
// st.push(s[i]);
// } else {
// ans.push_back(s[i]);
// }
// }
// string sum;
// while(!st.empty()){
// sum += st.top();
// st.pop();
// }
// for(int i = ans.size() - 1;i >= 0;i--){
// sum += ans[i];
// }
// return sum;
// }
// string zz_hz(string s){ //中缀表达式 转 后缀表达式
// vector<char> ans;
// stack<char> st;
// for(int i = 0;i < s.size();i++){
// if(s[i] == '('){
// st.push('(');
// } else if(s[i] == ')'){
// while(st.top() != '(' && !st.empty()){
// ans.push_back(st.top());
// st.pop();
// }
// if(!st.empty()) st.pop();
// } else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/'){
// while(!st.empty()){
// if(st.top() == '('){
// break;
// }
// if(bj(st.top(),s[i])){
// ans.push_back(st.top());
// st.pop();
// } else {
// break;
// }
// }
// st.push(s[i]);
// } else {
// ans.push_back(s[i]);
// }
// }
// string sum;
// for(int i = 0;i < ans.size();i++){
// sum += ans[i];
// }
// while(!st.empty()){
// sum += st.top();
// st.pop();
// }
// return sum;
// }
// string hz_zz(string s){ //后缀表达式 转 中缀表达式
// stack<string> st;
// for(int i = 0;i < s.size();i++){
// if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/'){
// string op1 = st.top();
// st.pop();
// string op2 = st.top();
// st.pop();
// string res = "(" + op1 + s[i] + op2 + ")";
// st.push(res);
// } else {
// st.push(string(1, s[i]));
// }
// }
// return st.top();
// }
// string qz_zz(string s){ //前缀表达式 转 中缀表达式
// stack<string> st;
// for(int i = s.size() - 1;i >= 0;i--){
// if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/'){
// string op1 = st.top();
// st.pop();
// string op2 = st.top();
// st.pop();
// string res = "(" + op1 + s[i] + op2 + ")";
// st.push(res);
// } else {
// st.push(string(1, s[i]));
// }
// }
// return st.top();
// }
// string qz_hz(string s){ //前缀表达式 转 后缀表达式
// return zz_hz(qz_zz(s));
// }
// string hz_qz(string s){ //后缀表达式 转 前缀表达式
// return zz_qz(hz_zz(s));
// }
// int main(){
// string s;
// cin >> s;
// cout << zz_qz(s);
// return 0;
// }
//高精度
#include<bits/stdc++.h>
using namespace std;
string s1,s2; //加减乘除的第一个操作数
long long s3; //除法时的第二个操作数
string sum = "0",diff = "0",prod = "0",quo = "0"; //和差积商
long long rem = 0; //余数
int a[10010],b[10010],c[10010];
void add(string s1,string s2){//高精度加法add
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size(),l = max(l1,l2);
for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0';
for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0';
for(int i = 0;i < l;i++){
c[i] += a[i] + b[i];
if(c[i] >= 10) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
if(c[l] > 0) l++;
sum = "";
for(int i = l - 1;i >= 0;i--) sum += c[i] + '0';
return ;
}
void sub(string s1,string s2){//高精度减法sub
diff = "";
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size(),l = max(l1,l2);
for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0';
for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0';
if((s1.size() < s2.size()) || (s1.size() == s2.size() && s1 < s2)) {
swap(a,b);
diff += '-';
}
for(int i = 0;i < l;i++){
c[i] += a[i] - b[i];
if(c[i] < 0) {
c[i + 1]--;
c[i] += 10;
}
}
bool flag2 = false;
for(int i = l - 1;i >= 0;i--) {
if(!flag2 && c[i] != 0) flag2 = true;
if(flag2) diff += c[i] + '0';
}
if(diff == "") diff = "0";
return ;
}
void mul(string s1,string s2){//高精度乘法mul
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size(),l = l1 + l2;
for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0';
for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0';
for(int i = 0;i < l1;i++){
for(int j = 0;j < l2;j++){
c[i + j] += a[i] * b[j];
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
while (l > 1 && c[l - 1] == 0) {
l--;
}
prod = "";
for(int i = l - 1;i >= 0;i--) prod += c[i] + '0';
return ;
}
void div(string s1, long long s2) {//高精度除法div
memset(a, 0, sizeof(a));
int l1 = s1.size();
for (int i = 0; i < l1; i++) a[i] = s1[l1 - i - 1] - '0';
quo = "";
rem = 0;
for (int i = l1 - 1; i >= 0; i--) {
rem = rem * 10 + a[i];
if (rem >= s2) {
quo += rem / s2 + '0';
rem %= s2;
} else if(quo != "") {
quo += '0';
}
}
if(quo == "") quo = "0";
return ;
}
int main() {
cin >> s1;
//cin >> s2;
cin >> s3;
//add(s1,s2);
//sub(s1,s2);
//mul(s1,s2);
div(s1,s3);
//cout << sum << endl;
//cout << diff << endl;
//cout << prod << endl;
cout << quo << endl;
cout << rem << endl;
return 0;
}
这里空空如也












有帮助,赞一个