A-WangCai
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
卷王旺财今天也在卷数学,他发明了一个名为 "WangCai" 的函数,它的定义如下:
WangCai(x)={x,x⩾00,x<0WangCai(x)= \begin{cases} x,&x\geqslant 0\\ 0, &x<0 \end{cases}WangCai(x)={x,0,x⩾0x<0
现在旺财给 yyjj 一个 xxx ,希望 yyjj 回答出 WangCai(x)WangCai(x)WangCai(x) 。
输入描述:
一个整数 xxx (−10⩽x⩽10)(-10\leqslant x\leqslant 10)(−10⩽x⩽10),表示旺财告诉 yyjj 的函数的自变量 xxx。
输出描述:
输出一个整数,表示 WangCai(x)WangCai(x)WangCai(x) 的值是多少。
示例1
输入
-1
输出
0
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n<0)cout<<"0";
else cout<<n;
return 0;
}
J-AsindE 的屏幕
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
AsindE 不喜欢一个画面中出现超过 kkk 种颜色,现在他的电脑屏幕上有 nnn 个像素点有颜色,每种颜色用一个整数表示。
AsindE 可以将一个像素点的颜色改成另一种颜色,请你计算 jbgg 最少需要改变多少个像素点的颜色才能使屏幕上的像素点的颜色种类不超过 kkk 个。
输入描述:
第一行两个正整数 n,kn, kn,k (1⩽k⩽n⩽2×105)(1 \leqslant k \leqslant n \leqslant 2\times 10^5)(1⩽k⩽n⩽2×105),分别表示屏幕上有颜色的像素点个数和 AsindE 能容忍同时出现在屏幕上的颜色种数。 第二行 nnn 个正整数 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an (1⩽ai⩽n)(1 \leqslant a_i \leqslant n)(1⩽ai⩽n),表示屏幕上各像素点的颜色,每种颜色用一个正整数表示。
输出描述:
一个整数,表示需要改变颜色的像素点的最少数量。
示例1
输入
5 2 1 1 2 2 5
输出
1
说明
将 5 改为 2 即可
//思想就是根据各颜色的个数从大到小排序,在满足最多k后,只需要修改小部分的颜色
#include<bits/stdc++.h>
using namespace std;
struct xx{
int b,c;
}s[200005];
bool cmp(xx x,xx y){
if(x.c==y.c)return x.b<y.b;
return x.c>y.c;
}
int main(){
int n,k,a[200005],i,y=0,d=0;
map<int,int>x,p;
cin>>n>>k;
for(i=0;i<n;i++){cin>>a[i];x[a[i]]++;}
for(auto j=x.begin();j!=x.end();j++)
{s[y].b=j->first;s[y].c=j->second;y++;}
sort(s,s+y,cmp);
for(i=0;i<y;i++)
{
if(k==0)break;
if(p[s[i].b]==0){k--;p[s[i].b]=1;}
}
for(i=0;i<n;i++)
if(p[a[i]]==0)d++;
cout<<d;
return 0;
}
K-yyjj 的礼物
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
yyjj 在校赛中击败 jbgg 夺得第一,大家决定挑选一些礼物送给 yyjj。
不过 yyjj 对数字很敏感,如果她在礼物中看到有一个礼物上的数字编号是另一个礼物数字编号的 kkk 倍就会不高兴。
商店里有 nnn 个编号不同的礼物,带伙想送 yyjj 尽可能多的礼物,你知道 yyjj 最多能收到多少个礼物吗?
输入描述:
第一行一个正整数 n,kn, kn,k (1⩽n⩽105,1⩽k⩽109)(1 \leqslant n \leqslant 10^5, 1\leqslant k \leqslant 10^9)(1⩽n⩽105,1⩽k⩽109),分别表示商店中的礼物个数和题目中描述的倍数。 第二行 nnn 个不同的正整数 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an (1⩽ai⩽109)(1\leqslant a_i \leqslant 10^9)(1⩽ai⩽109)。
输出描述:
一个正整数,表示 yyjj 最多能收到多少礼物。
示例1
输入
6 2 2 3 6 5 4 10
输出
3
说明
一种可能的礼物编号的集合是 {4,5,6}\{ 4,5,6\}{4,5,6}
//注意是最多能收到多少礼物,也就是保证礼物集合里,没有任意两个数之间存在k倍关系。
map中使用了long long int,因为a[i]*k会超过int
//先排序(这个很重要),然后取礼物(判断标记为0),再把当前礼物的k倍标记
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,i,a[100005],j,s=0;
map<long long int,long long int>x;
cin>>n>>k;
for(i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(i=0;i<n;i++){
if(x[a[i]]==0){s++;x[a[i]*k]=1;}
}cout<<s;
return 0;
}
L-jbgg 想吃巧克力
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
jbgg 今天突然想吃巧克力,他手上有 sss 元,地猫超市里总共有 nnn 种巧克力,每种巧克力都只有一件, jbgg 只想买其中的某一种。
今天是地猫超市设立十周年,超市将用一种特殊的方式找零:它将用糖果以一比一的方式代替找零中的每 111 分钱(111元等于 100100100 分)。比如,找零为 333 元 404040 分,那么获得的糖果数为 404040。
jbgg 想在一次购买中使通过找零得到的糖果数量最多。请问他最多能通过找零得到多少个糖果?(注意,jbgg 并不需要最小化他的花费,他只是想最大化通过找零得到的糖果数!)
输入描述:
第一行两个整数 n,sn, sn,s (1⩽n,s⩽100)(1\leqslant n,s\leqslant 100)(1⩽n,s⩽100),分别表示地猫超市里的巧克力品种数和 jbgg 身上带着的金钱总量。 接下来 nnn 行,每行两个整数 xi,yix_i,y_ixi,yi (1⩽xi⩽100;0⩽yi⩽100)(1\leqslant x_i\leqslant 100;0\leqslant y_i\leqslant 100)(1⩽xi⩽100;0⩽yi⩽100),表示第 iii 种巧克力要 xix_ixi 元 yiy_iyi 分。
输出描述:
输出一个整数表示 jbgg 通过特殊找零的方式最多能获得多少糖果。 如果 jbgg 不能买到巧克力,请输出 −1-1−1。
示例1
输入
5 10 3 90 12 0 9 70 5 50 7 0
输出
50
说明
买了 555 元 505050 分的巧克力,找了 444 元 505050 颗糖。
示例2
输入
5 5 10 10 20 20 30 30 40 40 50 50
输出
-1
说明
jbgg 一个巧克力都买不起,他 emo 了。
//k是统计不能买的个数,全部都不能,输出-1,原来我认为x>=s时不能买,但是等于时,如果y也为0,最后没有退款,结果为0.
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,s,x,y,k=0,a=0,b=0,c;
cin>>n>>s;c=n;
while(n--){
cin>>x>>y;
if(x>s||(x==s&&y>0)){k++;continue;}
else {
if(y)a=100-y;
if(a>b)b=a;
}
}
if(k==c)cout<<"-1";
else cout<<b;
return 0;
}