A - Thickest Burger
模拟 ,理解题意即可
#include<iostream>
#include<cstdio>
using namespace std;
int t; int a,b;
int main()
{
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d%d",&a,&b);
if(a>b)
printf("%d\n",a+b+a);
else
printf("%d\n",b+a+b);
}
return 0;
}
B-Relative atomic mass
同上,也是模拟
队友又比我快,哼(¬︿̫̿¬☆)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n;
string str;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>str;
int a=str.length();
int sum=0;
for(int i=0;i<a;i++)
{
if(str[i]=='C')
sum+=12;
if(str[i]=='H')
sum++;
if(str[i]=='O')
sum+=16;
}
printf("%d\n",sum);
}
return 0;
}
C - Recursive sequence
矩阵快速幂
递推公式已知,求某一项,相数又特别大,很容易让人想起矩阵快速幂求斐波那契数列。这道题与其思想类似。
- 用二项式定理将i^4拆开
- 求出转移方程
- 用快速幂解决问题
不会插入数学公式…上代码吧
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const long long MOD=2147493647;
struct Matrix{
long long arr[7][7];
void Clean()
{
memset(arr, 0, sizeof(arr));
for(long long i=0; i<7; i++)
arr[i][i] = 1;
}
};
/*void Clean(Matrix a){
memset(a.arr, 0, sizeof(a.arr));
for(long long i=0; i<7; i++)
a.arr[i][i] = 1;
}*/
Matrix p = {
1, 1, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 0, 0, 0,
4, 0, 4, 1, 0, 0, 0,
6, 0, 6, 3, 1, 0, 0,
4, 0, 4, 3, 2, 1, 0,
1, 0, 1, 1, 1, 1, 1
};
Matrix multiply_Matrix(Matrix a, Matrix b)//乘法运算
{
Matrix c;
for(long long i=0; i<7; i++)
{
for(long long j=0; j<7; j++)
{
c.arr[i][j] = 0;
for(long long k=0; k<7; k++)
{
c.arr[i][j] += (a.arr[i][k] * b.arr[k][j]) % MOD;
c.arr[i][j] %= MOD;
}
}
}
return c;
}
Matrix quick_Mod_Matrix(long long m)//快速幂
{
Matrix ans,b=p;
ans.Clean();
while(m)
{
if(m & 1)
ans = multiply_Matrix(ans, b);
m>>=1;
b = multiply_Matrix(b, b);
}
return ans;
}
int main()
{
long long t,n,a,b;
cin>>t;
while(t--)
{
cin>>n>>a>>b;
if(n==1) {cout<<a;continue;}
if(n==2) {cout<<b;continue;}
Matrix m=quick_Mod_Matrix(n-2);
long long ans=b*m.arr[0][0] % MOD;
ans=(ans + a*m.arr[1][0]%MOD) % MOD;ans=(ans + 16*m.arr[2][0]%MOD) % MOD;
ans=(ans + 8*m.arr[3][0]%MOD) % MOD;ans=(ans + 4*m.arr[4][0]%MOD) % MOD;
ans=(ans + 2*m.arr[5][0]%MOD) % MOD;ans=(ans+m.arr[6][0]) % MOD;
cout<<ans<<endl;
}
return 0;
}