P1116 车厢重组
题目描述
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
输入格式
共两行。
第一行是车厢总数N(≤10000)。
第二行是 N 个不同的数表示初始的车厢顺序。
(注:实际上数据中并不都在同一行,有可能分行输入)
输出格式
一个整数,最少的旋转次数。
用冒泡排序进行排序,定义一个次数进行计数,每次进行排序次数加1
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int step=0;
int a[10005];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
if(a[i]>a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
step++;
}
}
cout<<step;
return 0;
}
P1226 【模板】快速幂
题目描述
给你三个整数a,b,p,求 abmodp。
输入格式
输入只有一行三个整数,分别代表a,b,p。
输出格式
输出一行一个字符串 a^b mod p=s
,其中a,b,p 分别为题目给定的值, s 为运算结果。
a*a=a^1+1,a^2*a^2=a^2+2;
a自乘n次就是a^2n
所以可以用递归来写
要用longlong不然爆了
#include <bits/stdc++.h>
using namespace std;
int speed(long long a,long long n,long long mod)
{
if(n==1)
{
return a%mod;
}
if(n==0)
{
return 1;
}
long long c=speed(a,n/2,mod);
{
if(n%2==0)
return (c*c)%mod;
}
return ((c*c)%mod*a)%mod;
}
int main()
{
long long a,b,p;
cin>>a>>b>>p;
long long s=speed(a,b,p);
cout<<a<<"^"<<b<<" "<<"mod"<<" "<<p<<"="<<s<<endl;
return 0;
}
P1192 台阶问题
题目描述
有 N 级台阶,你一开始在底部,每次可以向上迈1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。
输入格式
两个正整数 N,K。
输出格式
一个正整数 ans(mod100003),为到达第 N 级台阶的不同方式数。
一道动态规划题
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k,n;
int dp[100001];
int mod=100003;
cin>>n>>k;
dp[0]=dp[1]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
if(i>=j)
{
dp[i]=(dp[i]+dp[i-j])%mod;
}
}
}
cout<<dp[n]%mod;
return 0;
}