前段时间家里电脑坏了,啥都干不了。。。。。今天终于好了
(来张康娜压压惊)
闲话不多说,最近又考了好几次试,我考得都快去见小奏(立华奏)了
T1:
FJ(又是他。。。)做了一套服装,打算给他的牛穿。
这套服装需要两头牛穿,每头牛有一个长度,两头牛的总长度不能超过这套服装所能容纳的长度,问有多少种穿法?
思路:从小到大排序,然后从第1头牛开始枚举,每次将和这头牛总长超过服装所能容纳的长度的牛删去,并计算出剩下的牛与这头牛所能组合的对数即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[200001];
int n,i,l,r,s,ans=0;
cin>>n>>s;
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
l=1;r=n;
while(l<r)
{
while(a[l]+a[r]>s) r--;
if(l>=r) break;
ans+=r-l;
l++;
}
cout<<ans;
return 0;
}
T2:
FJ有一个锁,这个锁有三个密码子,每个都是从1-n的整数(1<=n<=100),1和n是相邻的,因为这些密码子是一个圈。有两组密码能够打开这个锁,一个是FJ的,另一个是锁匠的。然而,这个锁有一个小的容错的几率,它会打开只要表盘上的数字位置与任意一个密码上的相应数字位置相差不超过2。比如,如果FJ的密码是(1,2,3),锁匠的密码是(4,5,6)。如果你的输入是(1,n,5)(因为这和FJ的密码很相近)或者是(2,4,8)(因为这和锁匠的密码很接近),这个锁都会打开
如果只有1个密码,答案肯定是125,5*5*5。
如果两个密码,答案最多肯定是250,但是同时与两个密码相近的个数如果要求的话,会比较麻烦。
我们可以枚举所有密码,判断是否与FJ或锁匠的密码相似,而密码是一个环,我们可以用
abs(x-y)<=2||abs(x-y)>=n-2 来解决
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,z1,z2,z3,zz1,zz2,zz3,s1,s2,s3,ss1,ss2,ss3,ans=0;
bool p=true;
cin>>n;
cin>>z1>>z2>>z3;
cin>>s1>>s2>>s3;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
{
p=true;
zz1=abs(z1-i);
zz2=abs(z2-j);
zz3=abs(z3-k);
ss1=abs(s1-i);
ss2=abs(s2-j);
ss3=abs(s3-k);
if((zz1<=2||zz1>=n-2)&&(zz2<=2||zz2>=n-2)&&(zz3<=2||zz3>=n-2))
{
ans++;
p=false;
}
if((ss1<=2||ss1>=n-2)&&(ss2<=2||ss2>=n-2)&&(ss3<=2||ss3>=n-2)&&p) ans++;
}
cout<<ans;
return 0;
}
T3:
FJ的农场被分为了一个平面坐标系,最左下角的坐标为(1,1),最右上角的坐标为(10^5,10^5).
FJ有一个探测蘑菇的雷达,当开启蘑菇雷达后,这个雷达每一秒会发现农场上的一个蘑菇,并且会告知这个蘑菇的坐标。
FJ的奶牛只会沿着一个方向开拖拉机,并且不会拐弯,这里的方向指的是和坐标轴平行的四个方向和与坐标轴夹角45度的对角线(当然是两条对角线)。并且每天FJ只允许奶牛开一次拖拉机,也就是说,每次采蘑菇,拖拉机只能沿着一个方向去采集所经过的点的蘑菇。
FJ允许他的奶牛从农场里的任意一个点,任意一个方向出发,并且他的拖拉机的速度奇快,从启动到完成任务话费的时间忽略不计。现在FJ想直到,如果要一次性的采集K个蘑菇,最早在什么时间完成任务。
我们要统计所有行,所有列和所有45°对角线什么时候能有k个蘑菇。
因此我们开4个数组,第1个数组的第i个元素表示第i行的蘑菇数,
第2个数组的第i个元素表示第i列的蘑菇数
对于对角线,我们根据经验,如果两个点的坐标之和相等,是在左下到右上的对角线上,如果两个点的坐标之差相等,是左上到右下的对角线上。
如果坐标要做差,会有负数,我们给每个差+100000的偏移量
然后枚举有没有某行,列,或对角线有K个蘑菇即可
#include <bits/stdc++.h>
using namespace std;
int n,m,k,s,l,r;
int a[200001]={},b[200001]={},c[300001]={},d[300001]={};
bool p;
int main()
{
for(int kk=1;kk<=2;kk++)
{
memset(a,0,200000*sizeof(int));
memset(b,0,200000*sizeof(int));
memset(c,0,300000*sizeof(int));
memset(d,0,300000*sizeof(int));
p=true;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>l>>r;
if(p)
{
a[l+100000]++;
b[r+100000]++;
c[l+r+100000]++;
d[l-r+100000]++;
if((a[l+100000]>=m||b[r+100000]>=m)||(c[l+r+100000]>=m||d[l-r+100000]>=m))
{
cout<<i<<endl;
p=false;
}
}
}
if(p) cout<<"-1"<<endl;
}
return 0;
}
T4:
奶牛们听说猪发明了一种秘密语言,叫做"猪语",因为猪不想让主人FJ知道他们在商量什么.奶牛们也感觉这样很不错,所以她们想发明他们自己的语言,牛语.。想把一个普通的英语单词转换成牛语很简单.如果一个单词的以一个元音字母('a','e','i','o','u)开头,那么只需在 这个单词的结尾加上"cow".例如,"udder"需要变成"uddercow"; 如果一个单词的第一个字母不是元音字母,那么只需把这个单词的第一个字母放到单词结尾,然后再在结尾加上"ow".例如 "farmer"需要变成"armerfow". 所以"the cows escape at dawn"就会变成"hetow owscow escapecow atcow awndow." 奶牛们自信地以为这样就可以不让FJ知道他们的"越狱"计划. 可惜奶牛们都不是语言学家,他们觉得这样的翻译太无聊了,所以这个任务就交给你了. 你需要将N (1 ≤ N ≤ 100)个英语单词翻译成牛语,单词长度在3到40之间.
这题是送分题,按要求模拟即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s;
if(s[0]=='a'||s[0]=='e'||s[0]=='i'||s[0]=='o'||s[0]=='u')
cout<<s<<"cow"<<endl;
else
{
for(int j=1;j<s.size();j++)
cout<<s[j];
cout<<s[0]<<"ow"<<endl;
}
}
return 0;
}
E N D