No matter what activities you join,whether you want or not, you could gain unexpected something .
链接:https://ac.nowcoder.com/acm/contest/3570/A
在SMU算法竞赛团队中,谁的地位最高呢?答案是毋庸置疑的——大家发自内心爱戴的川川教练。川川教练对队内事务都非常上心,队员们的需求都尽量满足,队员们的问题也都尽快解决。但是最近川川总感觉力不从心,什么都要自己做实在是太累了!所以他需要你的帮助,这样他就可以有更多的时间和精力去和领导斗智斗勇,去为团队争取更多经费。最近,川川教练需要在新加入的集训队员中,挑选出一支最强的队伍去参加大学生程序设计竞赛。
川川之前太忙了,并不了解新的集训队员,只能根据HJ提供的队员能力值来筛选队员了。我们的大原则就是强强联手。具体的,新的集训队员一共n个人,HJ会为你提供每个人的编程能力值w。你需要找到编程能力值之和最大的三个人,输出他们的编程能力值之和。特别的,如果找不到一个队伍的编程能力值之和大于m,则输出”Waiver!”。
第一行输入一个整数n,一个整数m,中间用空格隔开。第二行输入n个整数wiw_iwi代表编程能力值。保证所有数据:3≤n≤1003 \leq n \leq 1003≤n≤1000≤m≤3000 \leq m \leq 3000≤m≤300−100≤wi≤100-100 \leq w_i \leq 100−100≤wi≤100
如果任意组合,都无法使得队伍的编程能力值之和大于m,输出一行字符串:"Waiver!"(不含引号)否则输出一个整数,表示在满足队伍编程能力值之和大于m的情况下能组成的最大编程能力值。
4 100
50 50 55 -5
155
我们选择前三个人,编程能力为155满足要求,同时也能获得最大的编程能力和。
4 300
50 50 55 -5
Waiver!
怎么选也满足不了要求,Waiver!
编程能力可能为负数哦,这也是可以理解的。
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a[1000];
int Max;
int main()
{
while (cin>>n>>Max)
{
for(int i=0;i<n;++i)
{
cin>>a[i];
}
sort(a,a+n,greater<int>());
int mm = a[0]+a[1]+a[2];
if(mm>Max)
cout<<mm<<endl;
else
{
cout<<"Waiver!"<<endl;
}
}
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/3570/D 来源:牛客网
kth特别喜欢自拍,但是她的手机被zyj摔在地上后,前置摄像头坏了,不管拍什么照片都是逆时针旋转了90°,而且照片都还是黑白的.这样的照片怎么能让kth找到对象呢?
现在kth向聪明的你求助,写一个程序帮助kth把图像旋转回来.(她手机太垃圾了,不带图片旋转功能).
因为照片是黑白的.所以对于手机屏幕来说,只有白色和黑色2种情况.
现在给你图片(通过01矩阵表示),对该图片进行旋转.使得图片显示正常.
给你n*n的矩阵且矩阵元素只有0和1,对矩阵实现旋转操作,使得图片恢复正常.2≤n≤10002 \le n \le 10002≤n≤1000
输出旋转之后的矩阵.矩阵每个元素间隔一个空格.
2
0 1
1 0
1 0
0 1
考虑一下旋转的方向.
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1009][1009];
int main()
{
while(cin>>n)
{
for(int i =1;i<=n;++i)
{
for(int j =1;j<=n;++j)
{
cin>>a[i][j];
}
}
for(int j =1;j<=n;++j)
{
for(int i=n;i>=1;--i)
{
if(i==n)
cout<<a[i][j];
else
{
cout<<" "<<a[i][j];
}
}
cout<<endl;
}
}
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/3570/E 来源:牛客网
HJGG现在有一个大小为 n(米)*m(米)的矩形花园。
由于HJGG有强迫症,所以这片花园被划分nm个为11(平方米)的方格。
现在,HJ想在这片花园上种好多种花,并且他想要相邻的格子上种不同的花~(解释:相邻指的是上下左右四个方向相邻) 添加解释。相邻的格子上种不同的花指的是:一个位置和他上下左右四个方向位置的颜色不同,对于上下左右这四个位置,是可以相同的。
由于HJ被集训队小可爱蕾酱缠着不能脱身,所以想要你来帮帮他~
如果可以满足HJ哥哥的要求,就告诉他“Beautiful flowers!”,如果不可以就告诉他“Oh! My poor HJ!”(输出均不含双引号)
谁让大家都不能拒绝蕾蕾呢!
输入仅一行三个整数n,m,k(1≤n,m,k≤105)n, m, k(1 \leq n, m, k \leq 10^5)n,m,k(1≤n,m,k≤105),分别表示HJGG花园的长和宽,HJGG拥有的花的种类数
输出一行你要告诉HJGG的话~
1 3 5
Beautiful flowers!
3 4 1
Oh! My poor HJ!
#include<bits/stdc++.h>
using namespace std;
int m,n,k;
int main()
{
while(cin>>n>>m>>k)
{
int flag = 0;
if(n==1&&m>1)
{
if(k>=2)
flag = 1;
}
else if(m==1&&n>1)
{
if(k>=2)
flag = 1;
}
else if(m==1&&n==1)
{
if(k>=1)
flag = 1;
}
else
{
if(k>=3)
flag = 1;
}
if(flag)
cout<<"Beautiful flowers!"<<endl;
else
{
cout<<"Oh! My poor HJ!"<<endl;
}
}
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/3570/F 来源:牛客网
SMU的英文全称是Southwest Minzu University,中文名叫做西南民族大学。这所大学因为男女比例约为2比8,因此又被大家戏称为稀男民族大学,又因为民族同学们,通常能歌善舞,且校内的舞蹈、唱歌活动非常之多,所以被戏称为稀男歌舞大学。
在计算机学院中,男同学的比例远高于其余学院,所以计算机学院的脱单率遥遥领先。但在计算机学院的算法竞赛团队中,却出现了诡异的一个现象:某一届的集训队员,竟然全都是SingleDog。他们非常讨厌被人私下嘲笑为SingleDog。最初,如果听到或者看到SingleDog这个字眼,他们就会失去理智,慢慢的,他们只要看到情侣出现,就抑制不住心中的愤怒。现在情况更加严重了!他们只要看到成双成对的东西,都会开始无能狂怒。现在有一份集训队的通知文件,必须要发到群里,为了让他们心平气和的看完这份文件,只能精简一些文字了。具体的精简策略:集训队的通知文件是一堆小写字母,为了使这些字母不要成双成对的出现,我们只保留每种字母出现的第一个就好。
第一行输入一个n,代表集训队的通知文件的长度。第二行输入一个字符串s,代表集训队的通知文件。保证对于所有数据:1 <= n <= 1000字符串s中,只包含a ~ z 的小写字母。
第一行输出处理后的通知文件长度。第二行输出处理后的集训队通知文件。
18
woyexiangtanlianai
11
woyexiangtl
#include<bits/stdc++.h>
using namespace std;
int aa[27];
int n;
string a;
string b;
int main()
{
while(cin>>n)
{
memset(aa,0,sizeof(aa));
cin>>a;
int mm = 0;
for(int i =0;i<a.length();++i)
{
aa[a[i]-96]++;
if(aa[a[i]-96]==1)
{
mm++;
b+=a[i];
}
}
cout<<mm<<endl;
for(int i =0;i<b.length();++i)
{
cout<<b[i];
}
cout<<endl;
a.clear();
b.clear();
}
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/3570/G 来源:牛客网
在简谱中,音符是记录音的高低和长短的符号。而用来表示这些音的高低的符号,是用七个阿拉伯数字作为标记,它们的写法是:1、2、3、4、5、6、7,读法为:do、re、mi、fa、sol、la、si。现在给你一段由N个音符构成的简谱,以及唱出来的读音(长度小于10的字符串)的记录,请你判断总共唱错了几个读音。
第一行输入一个整数N(0<N≤1040< N\leq10^{4}0<N≤104);第二行包含N个数字构成的简谱,数字间用空格隔开;第三行包含N个读音,读音间用空格隔开.
总共唱错的读音个数.
8
1 2 3 4 5 6 7 1
do re mi fa sol la si der
1
仅最后一个读音唱错.
#include<bits/stdc++.h>
using namespace std;
string a[10006];
int n;
map<int , string> mp;
int aa[10005];
int main()
{
mp[1] = "do";
mp[2] = "re";
mp[3] = "mi";
mp[4] = "fa";
mp[5] = "sol";
mp[6] = "la";
mp[7] = "si";
while(cin>>n)
{
for(int i =1;i<=n;++i)
cin>>aa[i];
for(int i =1;i<=n;++i)
{
cin>>a[i];
//cout<<a[i]<<" ";
}
int flag= 0;
for(int i =1;i<=n;++i)
{
if(mp[aa[i]] != a[i])
flag++;
}
cout<<flag<<endl;
for(int i=1;i<=n;++i)
a[i].clear();
}
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/3570/J 来源:牛客网
大家都知道斐波那契数列吧!它的定义是这样的:斐波那契数列(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 \geq 3,n \in N^*n≥3,n∈N∗)。
这题的题意也很简单,给你一个正整数n(1≤n≤107)n ( 1 \leq n \leq10^7)n(1≤n≤107),让你输出斐波那契数列的第n项~由于答案较大,所以输出答案对109+710^9+7109+7取模后的数。
多组读入,保证不超过10组,每组一个正整数n(1≤n≤107)n ( 1 \leq n \leq10^7)n(1≤n≤107)。
斐波那契数列的第n项,答案对109+710^9+7109+7取模。
1
1
请留意本题使用空间限制。
//#include<bits/stdc++.h>
#include <iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll f=2;
struct node
{
ll materix[5][5];
};
node mul(node a,node b) //矩阵乘法
{
node res;
memset(res.materix,0,sizeof res.materix);
for(int i=1;i<=f;i++)
for(int j=1;j<=f;j++)
for(int k=1;k<=f;k++)
res.materix[i][j]=(res.materix[i][j]+a.materix[i][k]*b.materix[k][j])%mod;
return res;
}
node ksm(node a,ll b)
{
node ans;
memset(ans.materix,0,sizeof ans.materix);
for(int i=1;i<=f;i++)
ans.materix[i][i]=1;
while(b)
{
if(b&1)
ans=mul(ans,a);
b>>=1;
a=mul(a,a);
}
return ans;
}
int main()
{
ll N;
while(cin>>N&&N!=-1)
{
if(N==1||N==2)
printf("1\n");
else if(N==0)
printf("0\n");
else
{
node a,b;
a.materix[1][1]=1; a.materix[1][2]=1;
a.materix[2][1]=1; a.materix[2][2]=0; //a是那个幂矩阵,
b.materix[1][1]=1; b.materix[1][2]=0;
b.materix[2][1]=1; b.materix[2][2]=0; //b是最初始的矩阵
//假如a*a*a*b就是a^3*b,所以先求用快速幂求a的三次方,再用结果和b相乘
//注意乘的顺序,矩阵相乘a*b!=b*a,顺序不能搞错
//这里个人有个小诀窍,因为.f(n)=a*f(n-1)+b*f(n-2)+c,所以前边的那个应该是构造矩阵
node ans = ksm(a ,N-2); //从3开始,所以-2
ans = mul(ans ,b) ;
printf("%d\n",ans.materix[1][1] ) ;
}
}
return 0;
}