ACM学习笔记DAY1
今天学习的主要内容为STL和快速幂
- 作为STL的一些操作可以去这个地方
- 以下是快速幂的代码
ll quick_pow(int x, int n)
{
ll res = 1;
while (n > 0)
{
if (1 == n % 2)
res *= x; res %= mod;
x *= x;
x %= mod;
n = (n >> 1);
}
return res;
}
下面是矩阵快速幂的代码
const int maxn = 100;
int n;
struct matrix
{
int m[maxn][maxn];
};
matrix mul(matrix x, matrix y)
{
matrix tmp;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
tmp.m[i][j] = 0;
for (int k = 0; k < n; k++)
{
tmp.m[i][j] += (x.m[i][k] * y.m[k][j])%mod;
}
}
}
return tmp;
}
matrix quick_pow(matrix x, int m)
{
matrix res;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j)
res.m[i][j] = 1;
else
{
res.m[i][j] = 0;
}
}
}
while (m > 0)
{
if (1 == m % 2)
res = mul(res, x);
x = mul(x, x);
m >>= 1;
}
return res;
}
今天在打vj的时候遇到了卡到了这道题上
最后把在考试结束后找到的大佬题解在此贴出来
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
double num[1005] = { 0 }, tp; char op;
while (scanf("%lf", &tp))
{
int cnt = 0; num[0] = tp;
op = getchar();
if (op == '\n' && tp == 0)
{
return 0;
}
while (1)
{
scanf("%c%lf", &op, &tp);
if (op == '*')
{
num[cnt] *= tp;
}
else if (op == '/')
{
num[cnt] /= tp;
}
else
{
if (op == '-')
{
tp = -tp;
}
num[++cnt] = tp;
}
if ((op = getchar()) == '\n')
{
break;
}
}
for (int i = cnt; i > 0; --i)
{
num[i - 1] += num[i];
}
printf("%.2f\n", num[0]);
}
return 0;
}
希望可以和大家一起努力,共勉!
-7.6