国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

洛谷題單算法1-1模擬與高精度

這篇具有很好參考價(jià)值的文章主要介紹了洛谷題單算法1-1模擬與高精度。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

發(fā)文章只是為了督促自己做題,雙非大二剛轉(zhuǎn)科班的菜菜一枚,代碼僅供參考,不足之處望理解。

P2670 [NOIP2015 普及組] 掃雷游戲

#include<iostream>
using namespace std;
int n, m, i = 0, j = 0;
char ch[105][105] = { 0 };
int dilei(int i, int j, int n, int m) {
	int cnt = 0, flag = 0;
	if (ch[i][j] == '*'){
		flag = 1;
	}
	else {
		if (ch[i - 1][j - 1] == '*')
			cnt++;
		if (ch[i - 1][j] == '*')
			cnt++;
		if (ch[i - 1][j + 1] == '*')
			cnt++;
		if (ch[i][j - 1] == '*')
			cnt++;
		if (ch[i][j + 1] == '*')
			cnt++;
		if (ch[i + 1][j - 1] == '*')
			cnt++;
		if (ch[i + 1][j] == '*')
			cnt++;
		if (ch[i + 1][j + 1] == '*')
			cnt++;
	}
	if (flag == 0)
		return cnt;
	else
		return -1;
}
int main() {
	cin >> n >> m;
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= m; j++) {
			cin >> ch[i][j];
		}
	}
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= m; j++) {
			if (dilei(i, j, n, m) >= 0)
				cout << dilei(i, j, n, m);
			else
				cout << "*";
		}
		cout << endl;
	}
	return 0;
}

P1042 [NOIP2003 普及組] 乒乓球

#include<iostream>
#include<math.h>
using namespace std;
char ch[2501][25] = { '0' };
int i = 0, j = 0;
void eleven(char ch[2501][25]) {
	int cntw = 0, cntl = 0;
	for (i = 0; i < 2501; i++) {
		for (j = 0; j < 25; j++) {
			if (ch[i][j] == 'W')
				cntw++;
			else if (ch[i][j] == 'L')
				cntl++;
			else
				goto flag1;
			if ((cntw >= 11 || cntl >= 11)) {
				if (abs(cntw - cntl) < 2) {
					continue;
				}
				else {
				cout << cntw << ":" << cntl << endl;
					cntw = 0, cntl = 0;
				}
			}
		}
	}
flag1:
	cout << cntw << ":" << cntl << endl;
}
void twentyone(char ch[2501][25]) {
	int cntw = 0, cntl = 0;
	for (i = 0; i < 2501; i++) {
		for (j = 0; j < 25; j++) {
			if (ch[i][j] == 'W')
				cntw++;
			else if (ch[i][j] == 'L')
				cntl++;
			else
				goto flag1;
			if ((cntw >= 21 || cntl >= 21)) {
				if (abs(cntw - cntl) < 2) {
					continue;
				}
				else {
				cout << cntw << ":" << cntl << endl;
					cntw = 0, cntl = 0;
				}
			}
		}
	}
flag1:
	cout << cntw << ":" << cntl << endl;
}
int main() {
	for (i = 0; i < 2501; i++) {
		for (j = 0; j < 25; j++) {
			flag1:
			cin>>ch[i][j];
			while (ch[i][j] == 'E')
				goto flag2;
		}
	}
flag2:
	eleven(ch);
	cout << endl;
	twentyone(ch);
	return 0;
}

P1563 [NOIP2016 提高組] 玩具謎題

#include<iostream>
using namespace std;
struct toy {
	int dir;
	string name;
};
struct act {
	int a, s;
};
toy to[100005];
act ac[100005];
int n, m, i = 0, j = 0, k = 0;
int main() {
	cin >> n >> m;
	for (i = 0; i < n; i++)
		cin >> to[i].dir >> to[i].name;
	for (i = 0; i < m; i++) {
		cin >> ac[i].a >> ac[i].s;
		if (to[k].dir == 0 && ac[i].a == 0)
			k = (k + (n - ac[i].s)) % n;
		else if (to[k].dir == 0 && ac[i].a == 1)
			k = (k + ac[i].s) % n;
		else if (to[k].dir == 1 && ac[i].a == 0)
			k = (k + ac[i].s) % n;
		else if (to[k].dir == 1 && ac[i].a == 1)
			k = (k + (n - ac[i].s)) % n;
	}
	cout << to[k].name;
	return 0;
}

P1601 A+B Problem(高精)

#include<iostream>
#include<vector>
using namespace std;
string A, B;
vector<int>a, b, c;
vector<int>add(vector<int>& a, vector<int>& b) {
	int t = 0;
	for (int i = 0; i < a.size() || i < b.size(); i++) {
		if (i < a.size())
			t += a[i];
		if (i < b.size())
			t += b[i];
		c.push_back(t % 10);
		t /= 10;
	}
	if (t)
		c.push_back(1);
	return c;
}
int main() {
	cin >> A >> B;
	for (int i = A.size() - 1; i >= 0; i--)
		a.push_back(A[i] - '0');
	for (int i = B.size() - 1; i >= 0; i--)
		b.push_back(B[i] - '0');
	auto c = add(a, b);
	for (int i = c.size() - 1; i >= 0; i--)
		cout << c[i];
	return 0;
}

P1303 A*B Problem

#include<iostream>
#include<vector>
using namespace std;
string A, B;
vector<int>a, b;
vector<int>mul(vector<int>& a, vector<int>& b) {
	vector<int>c(a.size() + b.size() + 5, 0);
	for (int i = 0; i < a.size(); i++)
		for (int j = 0; j < b.size(); j++)
			c[i + j] += a[i] * b[j];
	int t = 0;
	for (int i = 0; i < c.size(); i++) {
		t += c[i];
		c[i] = t % 10;
		t /= 10;
	}
	while (c.size() > 1 && c.back() == 0)
		c.pop_back();
	return c;
}
int main() {
	cin >> A >> B;
	for (int i = A.size() - 1; i >= 0; i--)
		a.push_back(A[i] - '0');
	for (int i = B.size() - 1; i >= 0; i--)
		b.push_back(B[i] - '0');
	auto c = mul(a, b);
	for (int i = c.size() - 1; i >= 0; i--)
		cout << c[i];
	return 0;
}

P1009 [NOIP1998 普及組] 階乘之和

#include<iostream>
using namespace std;
const int value = 1e5;
void jiecheng(int* a, int n) {
	a[0] = 1;
	for (int k = 1; k < value; k++)
		a[k] = 0;
	int i, j;
	for (i = 2; i <= n; i++) {
		int jw = 0;
		for (j = 0; j < value; j++) {
			int s = a[j] * i + jw;
			jw = s / 10;
			a[j] = s % 10;
		}
	}
}
int sum[value];
void qiuhe(int* a) {
	int jw = 0;
	for (int i = 0; i < value; i++) {
		sum[i] = sum[i] + a[i] + jw;
		jw = sum[i] / 10;
		sum[i] %= 10;
	}
}
int main() {
	int n, m;	cin >> n;
	int a[value] = { 0 };
	for (int i = 1; i <= n; i++) {
		jiecheng(a, i);
		qiuhe(a);
	}
	int i;
	for (i = value - 1; i >= 0; i--) {
		if (sum[i] == 0)
			continue;
		break;
	}
	for (i; i >= 0; i--)
		cout << sum[i];
	return 0;
}

P4924 [1007] 魔法少女小Scarlet

#include<iostream>
using namespace std;
int n, m, k, q = 1;
int a[505][505] = { 0 };
int f[505] = { 0 }, s[505] = { 0 }, t[505] = { 0 }, v[505] = { 0 };
struct act{
	int x, y, r, z;
}act[505];
void play(int x, int y, int r, int z) {
	int x1 = x - r, y1 = y - r;
	int xx = x - r, yy = y - r,k = 2 * r;
	for (int i = 1; i <= k; i++, yy++)
		f[i] = a[xx][yy];
	xx = x1, yy = y1;
	for (int i = 1; i <= k; i++, xx++)
		s[i] = a[xx][yy + k];
	xx = x1, yy = y1;
	for (int i = 1; i <= k; i++, yy--)
		t[i] = a[xx + k][yy + k];
	xx = x1, yy = y1;
	for (int i = 1; i <= k; i++, xx--)
		v[i] = a[xx + k][yy];
	xx = x1, yy = y1;
	if (z == 0) {
		for (int i = 1; i <= k; i++) {
			int temp = f[i];
			f[i] = v[i];
			v[i] = t[i];
			t[i] = s[i];
			s[i] = temp;
		}
	}
	else {
		for (int i = 1; i <= k; i++) {
			int temp = f[i];
			f[i] = s[i];
			s[i] = t[i];
			t[i] = v[i];
			v[i] = temp;
		}
	}
	for (int i = 1; i <= k; i++, yy++)
		a[xx][yy] = f[i];
	xx = x1, yy = y1;
	for (int i = 1; i <= k; i++, xx++)
		a[xx][yy + k] = s[i];
	xx = x1, yy = y1;
	for (int i = 1; i <= k; i++, yy--)
		a[xx + k][yy + k] = t[i];
	xx = x1, yy = y1;
	for (int i = 1; i <= k; i++, xx--)
		a[xx + k][yy] = v[i];
	xx = x1, yy = y1;
	r--;
	if (r > 0)
		play(x, y, r, z);
}
int main(){
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			a[i][j] = q;
			q++;
		}
	}
	for (int i = 1; i <= m; i++) {
		cin >> act[i].x >> act[i].y >> act[i].r >> act[i].z;
		play(act[i].x, act[i].y, act[i].r, act[i].z);
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}

P1328 [NOIP2014 提高組] 生活大爆炸版石頭剪刀布

#include<iostream>
using namespace std;
int n, na, nb, cnta = 0, cntb = 0;
int a[205] = { 0 }, b[205] = { 0 };
int caiquan[5][5] = {   {0,2,1,1,2},
		       {1,0,2,1,2},
		       {2,1,0,2,1},
		       {2,2,1,0,1},
		       {1,1,2,2,0}
};
int main(){
	cin >> n >> na >> nb;
	for (int i = 0; i < na; i++)
		cin >> a[i];
	for (int i = na; i < n; i++)
		a[i] = a[i - na];
	for (int i = 0; i < nb; i++)
		cin >> b[i];
	for (int i = nb; i < n; i++)
		b[i] = b[i - nb];
	for (int i = 0; i < n; i++) {
		int x = a[i];
		int y = b[i];
		if (x == y)
			continue;
		if (caiquan[x][y] == 1)
			cnta++;
		if (caiquan[x][y] == 2)
			cntb++;
	}
	cout << cnta << " " << cntb;
	return 0;
}

P1067 [NOIP2009 普及組] 多項(xiàng)式輸出

#include<iostream>
using namespace std;
int n, i = 0;
int a[105];
void fuhaomax(int a) {
	if (a == 1)
		return;
	else if (a == -1)
		cout << "-";
	else
		cout << a;
}
void fuhao1(int a) {
	if (a == 1)
		cout << "+";
	else if (a == -1)
		cout << "-";
	else if (a > 0)
		cout << "+" << a;
	else
		cout << a;
}
void fuhao0(int a) {
	if (a > 0)
		cout << "+" << a;
	else
		cout << a;
}
int main(){
	cin >> n;
	for (i = 0; i <= n; i++)
		cin >> a[i];
	if (n == 0) {
		cout << a[0];
		goto key1;
	}
	for (i = 0; i <= n; i++) {
		if (a[i] != 0) {
			if (n - i == n) {
				fuhaomax(a[i]);
				cout << "x^" << n;
			}
			else if (n - i == 1) {
				fuhao1(a[i]);
				cout << "x";
			}
			else if (n - i == 0) {
				fuhao0(a[i]);
			}
			else {
				fuhao1(a[i]);
				cout << "x^" << n - i;
			}
		}
	}
key1:
	return 0;
}

P1098 [NOIP2007 提高組] 字符串的展開

????????這題太惡心了,看完題解發(fā)現(xiàn)三種情況沒(méi)有考慮,后來(lái)給補(bǔ)上了,我的 if-else 思路可能寫的不太好,但是能過(guò)

#include<iostream>
#include<cstring>
using namespace std;
int p1, p2, p3, i = 0, j = 0, len = 0;
char in[101];
char out[10000];
char shuzi[10] = { '0','1','2','3','4','5','6','7','8','9' };
char xiaoxie(char ch) {
	if (ch >= 'A' && ch <= 'Z')
		return ch + 32;
	else
		return ch;
}
char daxie(char ch) {
	if (ch >= 'a' && ch <= 'z')
		return ch - 32;
	else
		return ch;
}
int IsShuzi(char ch) {
	for (int p = 0; p < 10; p++) {
		if (ch == shuzi[p]) {
			return 1;
			break;
		}
	}
	return 0;
}
int main() {
	cin >> p1 >> p2 >> p3;
	cin >> in;
	len = strlen(in);
	int flag = 0;
	while (flag == 0 && in[i] == '-') {
		out[j] = in[i];
		i++;
		j++;
	}
	flag = 1;
	for (i; i < len; i++) {
		if (in[i] != '-') {
			out[j] = in[i];
			j++;
		}
		else {
			if (in[i + 1] == '-') {
				while (in[i] == '-') {
					out[j] = in[i];
					j++;
					i++;
				}
				out[j] = in[i];
				j++;
			}
			else {
				if (in[i + 1] == in[i - 1] + 1) {
					out[j] = in[i + 1];
					i++;
					j++;
				}
				else if (in[i - 1] >= in[i + 1]) {
					out[j] = in[i];
					j++;
				}
				else if (in[i - 1] < in[i + 1]) {
					if (IsShuzi(in[i - 1]) == 1 && IsShuzi(in[i + 1]) == 0) {
						out[j] = in[i];
						j++;
					}
					else {
						int x = in[i + 1] - in[i - 1];
						if (p1 == 1) {
							if (p3 == 1) {
								int t = in[i - 1] + 1;
								char min = t;
								char max = t + x - 1;
								for (char ch = xiaoxie(min); ch < xiaoxie(max); ch += 1) {
									for (int r = 0; r < p2; r++) {
										out[j] = ch;
										j++;
									}
								}
							}
							else {
								int t = in[i - 1] + 1;
								char min = t;
								char max = t + x - 2;
								for (char ch = xiaoxie(max); ch >= xiaoxie(min); ch -= 1) {
									for (int r = 0; r < p2; r++) {
										out[j] = ch;
										j++;
									}
								}
							}
						}
						else if (p1 == 2) {
							if (p3 == 1) {
								int t = in[i - 1] + 1;
								char min = t;
								char max = t + x - 1;
								for (char ch = daxie(min); ch < daxie(max); ch += 1) {
									for (int r = 0; r < p2; r++) {
										out[j] = ch;
										j++;
									}
								}
							}
							else {
								int t = in[i - 1] + 1;
								char min = t;
								char max = t + x - 2;
								for (char ch = daxie(max); ch >= daxie(min); ch -= 1) {
									for (int r = 0; r < p2; r++) {
										out[j] = ch;
										j++;
									}
								}
							}
						}
						else if (p1 == 3) {
							for (int r = 0; r < (x - 1) * p2; r++) {
								out[j] = '*';
								j++;
							}
						}
					}
				}
			}
		}
	}
	cout << out << endl;
	return 0;
}

P1591 階乘數(shù)碼

#include<iostream>
using namespace std;
int t, n, x;
int a[100000];
int ans[11];
void jiecheng(int* a, int n, int x) {
	a[0] = 1;
	for (int k = 1; k < 100000; k++)
		a[k] = 0;
	int i, j;
	for (i = 2; i <= n; i++) {
		int jw = 0;
		for (j = 0; j < 100000; j++) {
			int s = a[j] * i + jw;
			jw = s / 10;
			a[j] = s % 10;
		}
	}
	int cnt = 0, flag = 0;
	for (int i = 99999; i >= 0; i--) {
		if (a[i] != 0)
			flag = 1;
		if (flag)
			if (a[i] == x)
				cnt++;
	}
	static int k = 0;
	ans[k] = cnt;  k++;
}
int main() {
	cin >> t;
	int flag = 0;
	for (int i = 0; i < t; i++) {
		cin >> n >> x;
		jiecheng(a, n, x);
	}
	for (int i = 0; i < t; i++)
		cout << ans[i] << endl;
	return 0;
}

P1518 [USACO2.4] 兩只塔姆沃斯牛 The Tamworth Two

? ? ? ? 注意結(jié)構(gòu)體在函數(shù)中的傳參(下學(xué)期c語(yǔ)言II要好好跟著大一補(bǔ)):

? ? ? ? ? ? ? ? point farmer;

? ? ? ? ? ? ? ? void fun(point *p){? ? ? p->? ? ?}

? ? ? ? ? ? ? ? int main () {? ?fun(&farmer);? ?}

#include<iostream>
using namespace std;
char ch[12][12];
int i = 0, j = 0;
struct point {
	int x, y, dir;
};
point farmer, cow;
void movefun(point* p) {
	switch (p->dir % 4) {
		case 0:
			if (ch[p->x - 1][p->y] == '*')
				p->dir++;
			else {
				ch[p->x - 1][p->y] = ch[p->x][p->y];
				ch[p->x][p->y] = '.';
				p->x--;
			}
			break;
		case 1:
			if (ch[p->x][p->y + 1] == '*')
				p->dir++;
			else {
				ch[p->x][p->y + 1] = ch[p->x][p->y];
				ch[p->x][p->y] = '.';
				p->y++;
			}
			break;
		case 2:
			if (ch[p->x + 1][p->y] == '*')
				p->dir++;
			else {
				ch[p->x + 1][p->y] = ch[p->x][p->y];
				ch[p->x][p->y] = '.';
				p->x++;
			}
			break;
		case 3:
			if (ch[p->x][p->y - 1] == '*')
				p->dir++;
			else {
				ch[p->x][p->y - 1] = ch[p->x][p->y];
				ch[p->x][p->y] = '.';
				p->y--;
			}
			break;
	}
}
int main(){
	for (i = 0; i <= 11; i++)
		ch[0][i] = '*', ch[11][i] = '*';
	for (i = 1; i <= 10; i++)
		ch[i][0] = '*', ch[i][11] = '*';
	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			cin >> ch[i][j];
			if (ch[i][j] == 'F')
				farmer.x = i, farmer.y = j, farmer.dir = 0;
			if (ch[i][j] == 'C')
				cow.x = i, cow.y = j, cow.dir = 0;
		}
	}
	int time = 0, flag = 0;
	while (time <= 1000) {
		movefun(&farmer);
		movefun(&cow);
		time++;
		if (farmer.x == cow.x && farmer.y == cow.y) {
			flag = 1;
			break;
		}
	}
	if (flag == 1)
		cout << time;
	else
		cout << flag;
	return 0;
}

P1065 [NOIP2006 提高組] 作業(yè)調(diào)度方案

? ? ? ? 這題看完題解后還沒(méi)能理解......

#include<iostream>
using namespace std;
int m, n, ans = 0;
struct Information {
    int id, cost;
} informa[21][21];
int queue[501];int machine_time[21][100001];int step[21];int last_time[21];
int main(){
    cin >> m >> n;
    for (int i = 1; i <= m * n; i++)
        cin >> queue[i];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> informa[i][j].id;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> informa[i][j].cost;
    for (int i = 1; i <= m * n; i++) {
        int now = queue[i];
        step[now]++;
        int id = informa[now][step[now]].id;
int cost = informa[now][step[now]].cost;
        int s = 0;
        for (int j = last_time[now] + 1; ; j++) {
            if (machine_time[id][j] == 0)
                s++;
            else
                s = 0;
            if (s == cost) {
                for (int k = j - cost + 1; k <= j; k++)
                    machine_time[id][k] = 1;
                if (j > ans)
                    ans = j;
                last_time[now] = j;
                break;
            }
        }
    }
    cout << ans;
    return 0;
}

P1786 幫貢排序

#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct person {
    string name, lastposition, nowposition;
    long long money;
    int grade, num;
}p[111];
int change(string s) {
    if (s == "BangZhu") return 0;
    if (s == "FuBangZhu") return 1;
    if (s == "HuFa") return 2;
    if (s == "ZhangLao") return 3;
    if (s == "TangZhu") return 4;
    if (s == "JingYing") return 5;
    if (s == "BangZhong") return 6;
}
bool cmp(person p1, person p2) {
    if (p1.money == p2.money)
        return p1.num < p2.num;
    else
        return p1.money > p2.money;
}
bool cmpp(person p1, person p2) {
    if (change(p1.nowposition) == change(p2.nowposition)) {
        if (p1.grade == p2.grade)
            return p1.num < p2.num;
        else
            return p1.grade > p2.grade;
    }
    else
        return change(p1.nowposition) < change(p2.nowposition);
}
int main(){
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> p[i].name >> p[i].lastposition >> p[i].money >> p[i].grade;
        p[i].num = i;
    }
    sort(p + 3, p + n, cmp);
    for (int i = 0; i < n; i++) {
        if (i == 0) p[i].nowposition = "BangZhu";
        else if (i == 1 || i == 2) p[i].nowposition = "FuBangZhu";
        else if (i == 3 || i == 4) p[i].nowposition= "HuFa";
        else if (i >= 5 && i <= 8) p[i].nowposition = "ZhangLao";
        else if (i >= 9 && i <= 15) p[i].nowposition = "TangZhu";
        else if (i >= 16 && i <= 40) p[i].nowposition = "JingYing";
        else p[i].nowposition = "BangZhong";
    }
    sort(p, p + n, cmpp);
    for (int i = 0; i < n; i++)
        cout << p[i].name << " " << p[i].nowposition << " " << p[i].grade << endl;
    return 0;
}

P1249 最大乘積

? ? ? ? 這題有數(shù)學(xué)基礎(chǔ),思路會(huì)快,理解不了,記住就好:

? ? ? ? ? ? ? ? 正整數(shù)n分解成若干個(gè)互不相同的自然數(shù)的和,且使這些自然數(shù)的乘積最大:

? ? ? ? ? ? ? ? ? ? ? ? 1.先找最小k使 (sum=)2+3+4+...+k >= n

? ? ? ? ? ? ? ? ? ? ? ? 2.分類討論: 1.相等時(shí): 2 3 4 ... k 即為所求

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.sum=n+1時(shí): 3 4 5 ... k k+1 即為所求

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.sum=n+x(x>1)時(shí): 2 3 ... x-1 x+1 ... k 即為所求

#include<iostream>
using namespace std;
int n, s = 0, flag = 0;
int sum[100000];
void jiecheng(int* a, int n) {
    a[0] = 1;
    for (int k = 1; k < 100000; k++)
        a[k] = 0;
    int i, j;
    for (i = 2; i <= n; i++) {
        int jw = 0;
        for (j = 0; j < 100000; j++) {
            int s = a[j] * i + jw;
            jw = s / 10;
            a[j] = s % 10;
        }
    }
}
void chufa(int* a, int n) {
    int r = 0;
    for (int i = 100000 - 1; i >= 0; i--) {
        r = r * 10 + a[i];
        a[i] = r / n;
        r %= n;
    }
}
int main(){
    cin >> n;
    for (int i = 2; i < 200; i++) {
        s += i;
        int x = s - n;
        if (x >= 0) {
            flag = i;
            if (x == 0) {
                for (int i = 2; i <= flag; i++)
                    cout << i << " ";
                jiecheng(sum, i);
            }
            else if (x == 1) {
                for (int i = 3; i < flag; i++)
                    cout << i << " ";
                cout << i + 1;
                x = 2 * i;
                jiecheng(sum, i + 1);
                chufa(sum, x);
            }
            else {
                for (int i = 2; i < x; i++)
                    cout << i << " ";
                for (int i = x + 1; i <= flag; i++)
                    cout << i << " ";
                jiecheng(sum, i);
                chufa(sum, x);
            }
            break;
        }
    }
    cout << endl;
    int i;
    for (i = 100000 - 1; i >= 0; i--) {
        if (sum[i] == 0)
            continue;
        break;
    }
    for (i; i >= 0; i--)
        cout << sum[i];
    return 0;
}

P1045 [NOIP2003 普及組] 麥森數(shù)

? ? ? ? 這題第一問(wèn)是數(shù)學(xué)問(wèn)題: (2^p)+1的位數(shù) == (2^p)的位數(shù) == (p*lg2)+1的位數(shù)

? ? ? ? 注意第二問(wèn)一個(gè)一個(gè)的×2,會(huì)超時(shí)(得70points)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-826620.html

#include<iostream>
#include<math.h>
using namespace std;
int p, flag = 0;
int a[500] = { 1 };
void chengfa(int* a, int cnt, int x) {
    for (int i = 0; i < cnt; i++) {
        int jw = 0;
        for (int j = 0; j < 500; j++) {
            int s = a[j] * x + jw;
            jw = s / 10;
            a[j] = s % 10;
        }
    }
}
int main(){
    cin >> p;
    cout << (int)(p * log10(2)) + 1 << endl;
    if (p > 10000) {
        int t = pow(2, 20);
        int m = p / 20;
        int n = p - 20 * m;
        chengfa(a, m, t);
        chengfa(a, n, 2);
    }
    else {
        chengfa(a, p, 2);
    }
    a[0] --;
    for (int i = 500 - 1; i >= 0; i--) {
        cout << a[i];
        flag++;
        if (flag % 50 == 0)
            cout << endl;
    }
    return 0;
}

到了這里,關(guān)于洛谷題單算法1-1模擬與高精度的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++基礎(chǔ)算法高精度篇

    C++基礎(chǔ)算法高精度篇

    ??作者主頁(yè):慢熱的陜西人 ??專欄鏈接:C++算法 ??歡迎各位大佬??點(diǎn)贊??關(guān)注??收藏,??留言 主要講解了高精度算法的四種常用的計(jì)算 以下數(shù)字均指位數(shù) ①A + B(精度均在10^6) ②A - B (精度均在10^6) ③A * b (len(A) = 10^6, a = 1000); ④A / b (len(A) = 10^6, a = 1000); Ⅲ. Ⅰ . A

    2024年02月16日
    瀏覽(26)
  • C++基礎(chǔ)算法①——高精度加減法計(jì)算

    C++基礎(chǔ)算法①——高精度加減法計(jì)算

    當(dāng)我們利用計(jì)算機(jī)進(jìn)行數(shù)值計(jì)算,有時(shí)候會(huì)遇到這樣的問(wèn)題: n!的精確結(jié)果是多少? 當(dāng)n小于30的時(shí)候,我們當(dāng)然可以通過(guò)電腦自帶的計(jì)算器計(jì)算出來(lái)。但是當(dāng)我們遇到 100! 的時(shí)候就沒(méi)有辦法直接計(jì)算出精確的結(jié)果。再比如,求兩個(gè)20000位的數(shù)的和。 那怎么解決精度缺失的問(wèn)

    2024年02月16日
    瀏覽(21)
  • 洛谷題單 -- 圖論的簡(jiǎn)單入門

    洛谷題單 -- 圖論的簡(jiǎn)單入門

    圖的存儲(chǔ) - 洛谷 這一題要考察圖的存儲(chǔ)方式 , 一般可以使用鄰接矩陣 或 鄰接表來(lái)存儲(chǔ) 圖的結(jié)點(diǎn) 和1 邊的信息 ,詳情請(qǐng)看代碼 :? 【深基18.例3】查找文獻(xiàn) - 洛谷 這題考察有向圖的 dfs 和 bfs ,詳情請(qǐng)看代碼,如果用鄰接矩陣的話一定會(huì)mle,只能夠使用鄰接表,我這里采用的是用

    2024年04月13日
    瀏覽(22)
  • 洛谷題單 Part 6.7.1 矩陣

    應(yīng)隊(duì)友要求,開始學(xué)線性代數(shù),具體路線是矩陣 → rightarrow → 高斯消元 → rightarrow → 線性基。為多項(xiàng)式做個(gè)準(zhǔn)備 題面 板子,用結(jié)構(gòu)體寫的,感覺有點(diǎn)丑,一會(huì)兒看看題解有沒(méi)有寫得好看的 題面 搞個(gè)方陣 A 3 = [ a 3 a 2 a 1 0 0 0 0 0 0 ] , X = [ 1 1 0 0 0 1 1 0 0 ] , A_3=left [ begin{ma

    2024年02月15日
    瀏覽(16)
  • 洛谷題單 Part 8.2 最短路問(wèn)題

    最短路算法一般在算法競(jìng)賽中有四種比較常見, F l o y d Floyd Fl oy d 算法, B e l l m a n ? F o r d Bellman-Ford B e ll man ? F or d 算法, D i j k s t r a Dijkstra D ijk s t r a 算法, S P F A SPFA SPF A 算法。 F l o y d Floyd Fl oy d 算法和 B e l l m a n ? F o r d Bellman-Ford B e ll man ? F or d 算法的時(shí)間復(fù)雜

    2024年02月09日
    瀏覽(21)
  • 算法筆記——高精度算法(附源碼)

    算法筆記——高精度算法(附源碼)

    ??作者介紹:22級(jí)樹莓人(計(jì)算機(jī)專業(yè)),熱愛編程<目前在c++階段, 因?yàn)樽罱鼌⒓有滦怯?jì)劃算法賽道(白佬),所以加快了腳步,果然急迫感會(huì)增加動(dòng)力 ——目標(biāo)Windows,MySQL,Qt,數(shù)據(jù)結(jié)構(gòu)與算法,Linux,多線程,會(huì)持續(xù)分享學(xué)習(xí)成果和小項(xiàng)目的 ??作者主頁(yè):熱愛編程的

    2023年04月08日
    瀏覽(91)
  • 高精度算法詳解

    高精度算法詳解

    首先要知道為什么需要高精度算法: 高精度算法是 處理大數(shù)字 的數(shù)學(xué)計(jì)算方法,當(dāng)數(shù)字過(guò)大不能用 int 和 long long 存儲(chǔ)時(shí),我們就可以 使用string和vector類型 來(lái)存儲(chǔ)他們的每一位,然后進(jìn)行計(jì)算。 我們可以先把要輸入的兩個(gè)數(shù)字放到vector中存儲(chǔ),注意要 反著存(后邊做加法

    2024年01月17日
    瀏覽(93)
  • 高精度算法筆記·····························

    高精度算法筆記·····························

    加法 減法 乘法 除法 高精度加法的步驟: 1.高精度數(shù)字利用字符串讀入 2.把字符串 翻轉(zhuǎn) 存入兩個(gè)整型數(shù)組A、B 3.從低位到高位,逐位求和,進(jìn)位,存余 4.把數(shù)組C從高位到低位依次輸出 ????????1.2為準(zhǔn)備 ? ? ? ? 3為加法具體實(shí)現(xiàn)(0按位取反為-1,即-1時(shí)結(jié)束等價(jià)于=0) ?

    2024年01月21日
    瀏覽(92)
  • C++高精度算法

    目錄 前言:? 思路: 高精度加法: 高精度減法: 高精度乘法: 高精度除法: ?代碼: 一、高精度加法 二、高精度減法? 三、高精度乘法? 四、高精度除法 最后 ? ? ? ? 計(jì)算機(jī)最初、也是最重要的應(yīng)用就是數(shù)值運(yùn)算。在編程進(jìn)行數(shù)值運(yùn)算時(shí),有時(shí)會(huì)遇到運(yùn)算的精度要求特

    2024年02月14日
    瀏覽(96)
  • C++ 算法 高精度(較詳細(xì).)

    C++ 算法 高精度(較詳細(xì).)

    ????????在我們進(jìn)行計(jì)算的過(guò)程中,經(jīng)常會(huì)遇到 幾十位,甚至幾百位的數(shù)字 的計(jì)算問(wèn)題,也有可能會(huì)遇到小數(shù)點(diǎn)后幾十位,幾百位的情況,而我們面對(duì)這樣的情況下,?? 和 的數(shù)據(jù)范圍顯然是 不夠使用 的了。因此這時(shí),我們就需要引入一個(gè)新的算法,叫做 高精度算法

    2023年04月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包