Description
大家都知道斐波那契数列吧!它的定义是这样的:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n−1)+F(n−2) (n≥3,n∈N∗)。
这题的题意也很简单,给你一个正整数n(1≤n≤107),让你输出斐波那契数列的第n项~由于答案较大,所以输出答案对109+7取模后的数。
Input
多组读入,保证不超过10组,每组一个正整数n(1≤n≤107)。
Output
斐波那契数列的第n项,答案对109+7取模。
Samples
Input Copy
1
Output
1
Hint
请留意本题使用空间限制。
#pragma GCC optomize(2)
#pragma G++ optimize(2)
#include
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int maxn=1e7+7;
int s[maxn];
int main()
{
ll n,i;
s[1]=s[2]=1;
for(i=3;i<=maxn;i++)
{
s[i]=(s[i-1]+s[i-2])%mod;
}
while(cin>>n)
{
cout<<s[n]%mod<<endl;
}
return 0;
}
注意本题用递归解决会超时,所以可以选择打表做(即先将所有结果先算出来,用数组进行存储)。
Description
HJGG现在有一个大小为 n(米)*m(米)的矩形花园。
由于HJGG有强迫症,所以这片花园被划分n∗m个为1*1(平方米)的方格。
现在,HJ想在这片花园上种好多种花,并且他想要相邻的格子上种不同的花~(解释:相邻指的是上下左右四个方向相邻)
添加解释。相邻的格子上种不同的花指的是:一个位置和他上下左右四个方向位置的颜色不同,对于上下左右这四个位置,是可以相同的。
由于HJ被集训队小可爱蕾酱缠着不能脱身,所以想要你来帮帮他~
如果可以满足HJ哥哥的要求,就告诉他“Beautiful flowers!”,如果不可以就告诉他“Oh! My poor HJ!”(输出均不含双引号)
谁让大家都不能拒绝蕾蕾呢!
Input
输入仅一行三个整数n,m,k(1≤n,m,k≤105),分别表示HJGG花园的长和宽,HJGG拥有的花的种类数
Output
输出一行你要告诉Hj的话~
Samples
Input Copy
1 3 5
Output
Beautiful flowers!
#include
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
int a[1011][1011];
int main()
{
int n,m,k;
cin>>n>>m>>k;
if((n+m==2)&&(k==1)||k>=2)
cout<<"Beautiful flowers!"<<endl;
else
cout<<"Oh! My poor HJ!"<<endl;
return 0;
}
因为本题说,一个位置和他上下左右四个方向位置的颜色不同,对于上下左右这四个位置,是可以相同的,所以可以知道当k>=2的时候任何情况都是满足情况的,但是需要特判一种情况就是当n1&&m1时,k=1也是满足的。
Description
在SMU算法竞赛团队中,谁的地位最高呢?答案是毋庸置疑的——大家发自内心爱戴的川川教练。川川教练对队内事务都非常上心,队员们的需求都尽量满足,队员们的问题也都尽快解决。但是最近川川总感觉力不从心,什么都要自己做实在是太累了!所以他需要你的帮助,这样他就可以有更多的时间和精力去和领导斗智斗勇,去为团队争取更多经费。最近,川川教练需要在新加入的集训队员中,挑选出一支最强的队伍去参加大学生程序设计竞赛。
川川之前太忙了,并不了解新的集训队员,只能根据HJ提供的队员能力值来筛选队员了。我们的大原则就是强强联手。具体的,新的集训队员一共n个人,HJ会为你提供每个人的编程能力值w。你需要找到编程能力值之和最大的**三个人****,输出他们的编程能力值之和。特别的,如果找不到一个队伍的编程能力值之和大于m,则输出"Waiver!"。
Input
第一行输入一个整数n,一个整数m,中间用空格隔开。
第二行输入n个整数wi代表编程能力值。
保证所有数据:
3≤n≤100
0≤m≤300
−100≤wi≤100
Output
如果任意组合,都无法使得队伍的英语能力值之和大于m,输出一行字符串:“Waiver!”(不含引号)
否则输出一个整数,表示在满足队伍英语能力值之和大于m的情况下能组成的最大编程能力值。
Samples
Input Copy
4 100
50 50 55 -5
Output
155
Hint
#include
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
int a[1011];
int cmp(int a,int b)
{
return a>b;
}
int main()
{
ll n,m,i,k;
cin>>n>>m;
for(i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,cmp);
k=a[0]+a[1]+a[2];
if(k>m)
cout<<k<<endl;
else
cout<<"Waiver!"<<endl;
return 0;
}
直接sort排序,输出前三个即可。
Description
kth特别喜欢自拍,但是她的手机被zyj摔在地上后,前置摄像头坏了,不管拍什么照片都是逆时针旋转了90°,而且照片都还是黑白的.这样的照片怎么能让kth找到对象呢?
现在kth向聪明的你求助,写一个程序帮助kth把图像旋转回来.(她手机太垃圾了,不带图片旋转功能).
因为照片是黑白的.所以对于手机屏幕来说,只有白色和黑色2种情况.
现在给你图片(通过01矩阵表示),对该图片进行旋转.使得图片显示正常.
Input
给你n∗n的矩阵且矩阵元素只有0和1,对矩阵实现旋转操作,使得图片恢复正常.
2≤n≤1000
Output
输出旋转之后的矩阵.矩阵每个元素间隔一个空格.
Samples
Input Copy
2
0 1
1 0
Output
1 0
0 1
Hint
考虑一下旋转的方向.
#include
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
int a[1011][1011];
int main()
{
ll n,i,j;
cin>>n;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=n-1;j>=0;j--)
{
if(j==n-1)
cout<<a[j][i];
else
cout<<" "<<a[j][i];
}
putchar('\n');
}
return 0;
}
Description
在简谱中,音符是记录音的高低和长短的符号。而用来表示这些音的高低的符号,是用七个阿拉伯数字作为标记,它们的写法是:1、2、3、4、5、6、7,读法为:do、re、mi、fa、sol、la、si。现在给你一段由N个音符构成的简谱,以及唱出来的读音(长度小于10的字符串)的记录,请你判断总共唱错了几个读音。
Input
第一行输入一个整数N( 0
第三行包含N个读音,读音间用空格隔开.
Output
总共唱错的读音个数.
Samples
Input Copy
8
1 2 3 4 5 6 7 1
do re mi fa sol la si der
Output
1
#pragma GCC optomize(2)
#pragma G++ optimize(2)
#include
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int maxn=1e7+7;
int a[maxn];
map<int,string> p;
vector<int> q;
void init()
{
p[1]="do",p[2]="re",p[3]="mi",p[4]="fa",p[5]="sol",p[6]="la",p[7]="si";
}
int main()
{
init();
int n,i,sum=0;
string s;
cin>>n;
q.resize(n);
for(i=0;i<n;i++)
{
cin>>q[i];
}
for(i=0;i<n;i++)
{
cin>>s;
if(s==p[q[i]])
continue;
else
sum++;
}
cout<<sum<<endl;
return 0;
}
本题涉及stl相关知识点,目前正在studying
Description
SMU的英文全称是Southwest Minzu University,中文名叫做西南民族大学。这所大学因为男女比例约为2比8,因此又被大家戏称为稀男民族大学,又因为民族同学们,通常能歌善舞,且校内的舞蹈、唱歌活动非常之多,所以被戏称为稀男歌舞大学。
在计算机学院中,男同学的比例远高于其余学院,所以计算机学院的脱单率遥遥领先。但在计算机学院的算法竞赛团队中,却出现了诡异的一个现象:某一届的集训队员,竟然全都是SingleDog。他们非常讨厌被人私下嘲笑为SingleDog。最初,如果听到或者看到SingleDog这个字眼,他们就会失去理智,慢慢的,他们只要看到情侣出现,就抑制不住心中的愤怒。现在情况更加严重了!他们只要看到成双成对的东西,都会开始无能狂怒。现在有一份集训队的通知文件,必须要发到群里,为了让他们心平气和的看完这份文件,只能精简一些文字了。具体的精简策略:集训队的通知文件是一堆小写字母,为了使这些字母不要成双成对的出现,我们只保留每种字母出现的第一个就好。
Input
第一行输入一个n,代表集训队的通知文件的长度。
第二行输入一个字符串s,代表集训队的通知文件。
保证对于所有数据: 1≤n≤1000, 字符串s中,只包含a ~ z 的小写字母。
Output
第一行输出处理后的通知文件长度。
第二行输出处理后的集训队通知文件。
Samples
Input Copy
18
woyexiangtanlianai
Output
11
woyexiangtl
#pragma GCC optomize(2)
#pragma G++ optimize(2)
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
const int N=1e9+7;
char a[1010];
char flag[1010];
int main()
{
int i,j,sum=0,n;
cin>>n;
cin>>a;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]==a[j]){
flag[j]=1;
}
}
}
for(i=0;i<n;i++)
{
if(flag[i]!=1)
sum++;
}
cout<<sum<<endl;
for(i=0;i<n;i++)
{
if(flag[i]!=1)
cout<<a[i];
}
return 0;
}
就是将数组扫一遍,然后比较一下,用flag数组标记一下。