眼看六一儿童节(我的节日)就要来了,我们可(wu)亲(shi)可(ke)敬(zuo)的刘岳两神,非常善(xie)良(e)地决定出血本送我们六一儿童节的美好礼物,嗯哼,于是就有了5.31上午的考试。吼吼吼。
考完试,按惯例,我就应该非(bu)常(qing)及(bu)时(yuan)地写一篇内容丰(pin)富(ji)的总结
第一题……emmm,依旧很水,就是定义lucky的六位数(手动@zyt)为前三位数码和与后三位数码和相等的六位数,然后给定一个n,找一个比他大的最小的lucky的六位数,没有就输出-1
用我的脑壳想了一哈,就知道999999是最大的lucky数,那么当且仅当输入999999是,输出-1
inline bool lucky(int k)
{
int sum1=0,sum2=0,ans=0;
while(k>0)
{
ans++;
int a=k%10;
k/=10;
if(ans<=3) sum1+=a;
else sum2+=a;
}
if(sum1==sum2) return 1;
return 0;
}
int main()
{
scanf("%d",&n);
if(n==999999)
{
cout<<"-1"<<endl;
return 0;
}
for(int i=n+1;;i++)
{
if(lucky(i))
{
cout<<i<<endl;
break;
}
}
return 0;
}
然后第二题,一点都不水(至少我这个vegetable chicken)这样认为,吼吼吼
题目描述
有两个数组A,B,大小均为N。请在A中选择一个数x,B中选择一个数y,使得gcd(x,y)最大;如果有多组数gcd相同,找出x+y最大的。
格式
输入:第一行一个数n,第二行n个数表示Ai,第三行n个数表示Bi。
输出:输出gcd最大的那对数(gcd相同则和最大)的x+y的值。
最暴力肯定就是暴搜然后依次求gcd然后比较嘛,很明显会超时。考试的时候忘了辗转相除求gcd怎么写,导致gcd函数也用了很长时间
所以,辗转相除是很重要的
ll gcd(ll m,ll n)
{
return m%n? gcd(n,m%n):n;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,maxx=0,x;
bool a[maxn],b[maxn];
inline int read()
{
int x=0,w=0;
char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w? -x:x;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
x=read();
a[x]=1;
maxx=max(maxx,x);
}
for(int i=1;i<=n;i++)
{
x=read();
b[x]=1;
maxx=max(maxx,x);
}
for(int i=maxx;i>=1;i--)
{
int xx=0,yy=0;
for(int j=1;j*i<=maxx;j++)
{
if(a[i*j]) xx=i*j;
if(b[i*j]) yy=i*j;
}
if(xx&&yy) {printf("%d",xx+yy);return 0;}
}
printf("1");
return 0;
}
蓝月商场有n件宝贝,每件宝贝有两个属性:价钱price和品牌brand。其中brand是1-5之间某个整数。每件宝贝价钱两两不同。
贪玩蓝月有Q个代言人,每个代言人拍完戏之后,希望能从蓝月商场免费顺走一样宝贝。但是每个代言人有自己的喜好,例如古天乐只喜欢品牌1,陈小春喜欢品牌1或品牌2,渣渣辉喜欢品牌3和5……具体来说,代言人会有d个喜欢的品牌(1 <= d <= 5),同时他最喜欢这些品牌中,价钱第k便宜的宝贝。
请你求出每个代言人最喜欢的宝贝的价钱是多少!如果不存在这件宝贝,请输出-1.
格式
输入:第一行一个整数n,第二行n个整数描述每件宝贝的品牌,第三行n个数描述每件宝贝的价钱。第四行一个整数Q,接下来Q*3行,每3行描述一个代言人的信息。其中第一行一个整数d,第二行d个数表示喜欢的品牌,第三行一个数表示k。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100100;
int n,q,m,k,b[10],s1[maxn],s2[maxn],s3[maxn],s4[maxn],s5[maxn];
struct fj
{
int brand,price;
}a[100010];
inline bool cmp(fj a,fj b) {return (a.price<b.price);}
inline int get(int x)
{
int ret=0;
for(int i=1;i<=m;i++)
{
if(b[i]==1) ret+=s1[x];
if(b[i]==2) ret+=s2[x];
if(b[i]==3) ret+=s3[x];
if(b[i]==4) ret+=s4[x];
if(b[i]==5) ret+=s5[x];
}
return ret;
}
inline int read()
{
int x = 0,w = 0;
char ch = 0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
int main()
{
n=read();
for(int i=1;i<=n;i++) a[i].brand=read();
for(int i=1;i<=n;i++) a[i].price=read();
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(a[i].brand==1) s1[i]=s1[i-1]+1;else s1[i]=s1[i-1];
if(a[i].brand==2) s2[i]=s2[i-1]+1;else s2[i]=s2[i-1];
if(a[i].brand==3) s3[i]=s3[i-1]+1;else s3[i]=s3[i-1];
if(a[i].brand==4) s4[i]=s4[i-1]+1;else s4[i]=s4[i-1];
if(a[i].brand==5) s5[i]=s5[i-1]+1;else s5[i]=s5[i-1];
}
q=read();
for(int i=1;i<=q;i++)
{
m=read();
for(int i=1;i<=m;i++)
b[i]=read();
k=read();
if(get(n)<k)
{
cout<<"-1"<<endl;
continue;
}
int l=1,r=n;
int mid;
while(l<=r)
{
mid=(l+r)>>1;
if(get(mid)>=k) r=mid-1;
else l=mid+1;
}
cout<<a[l].price<<endl;
}
return 0;
}
考试可以考得不好,儿童节不能不过,吼吼吼