問題1:敢敢單單的斐波那契數列
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<bits/stdc++.h>
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;
}
注意本題用遞回解決會超時,所以可以選擇打表做(即先將所有結果先算出來,用陣列進行存盤),
問題2:HJ又種花啦
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<bits/stdc++.h>
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也是滿足的,
問題3: 川川教練的困惑
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
- 樣例1說明
我們選擇前三個人,編程能力為155滿足要求,同時也能獲得最大的編程能力和, - 樣例2說明
怎么選也滿足不了要求,Waiver! - 注意:編程能力可能為負數哦,這也是可以理解的,
#include<bits/stdc++.h>
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排序,輸出前三個即可,
問題4:kth的自拍照
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<bits/stdc++.h>
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;
}
問題5:We are singers
Description
在簡譜中,音符是記錄音的高低和長短的符號,而用來表示這些音的高低的符號,是用七個阿拉伯數字作為標記,它們的寫法是:1、2、3、4、5、6、7,讀法為:do、re、mi、fa、sol、la、si,現在給你一段由N個音符構成的簡譜,以及唱出來的讀音(長度小于10的字串)的記錄,請你判斷總共唱錯了幾個讀音,
Input
第一行輸入一個整數N( 0<N≤104 );
第二行包含N個數字構成的簡譜,數字間用空格隔開;
第三行包含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<bits/stdc++.h>
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
問題6:Incompetent Fury of a Single Dog
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<bits/stdc++.h>
#include <iostream>
#include <cstdio>
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陣列標記一下,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258726.html
標籤:其他
上一篇:樹莓派4B系統搭建
