1、3461:练83.1 压缩歌曲
[C++贪心习题]压缩歌曲
程序设计 -- 压缩歌曲
程序设计 -- 压缩歌曲_小明的电脑里面有一些歌。现在他需要把这些歌装进一个硬盘里面。 硬盘大小有限,由_逐渐疯狂的博客-CSDN博客
c--歌曲压缩 C - Songs Compression
#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
long long s;
struct T{
int a,b;
inline bool operator<(const T& t) const{
return a-b>t.a-t.b;
}
}t[100010];
int main( void )
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
scanf("%d%d",&t[i].a,&t[i].b);
s+=t[i].a;
}
sort(t,t+n);
for(int i=0;i<n && s>m;++i)
{
s-=t[i].a-t[i].b,++ans;
}
cout<<(s>m?-1:ans);
return 0;
}
2、3462:练83.2 汽水瓶
【C++每日一练】华为机试 | 牛客HJ22. 计算汽水瓶数目(三个空汽水瓶可以换一瓶汽水)
C++解决《汽水瓶》问题(vector、递归调用)
#include <iostream>
using namespace std;
int main() {
int n=0;
while(cin>>n)
{
if(n<=1)
break;
cout<<n/2<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
//剩余矿泉水瓶res,可以兑换的量为num
int num,res ;
while (cin >> num && num != 0)
{
//每次必须设0,不然会累计
res = 0;
while (num >= 3)
{
res += num / 3;
num = num % 3 + (num / 3) ;
}
if (num == 2) res+=1;
cout << res <<endl;
}
return 0;
}
3、3463:练83.3 特殊的集合
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
long n, m, i, num;
cin >> n;
long total = (n + 1) / 2;
for(i = 1; i <= n / 4; i += 2) {
num = 0;
m = i;
while(m <= n / 2){
num ++;
m *= 2;
}
total += num / 2;
}
cout << total << endl;
return 0;
}
/*
3463:练83.3 特殊的集合
http://bas.ssoier.cn:8086/problem_show.php?pid=3463
https://blog.csdn.net/m0_48489737/article/details/116405620
*/
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
long n, m, i, num;
cin >> n;
long total = (n + 1) / 2;
for(i = 1; i <= n / 4; i += 2) {
num = 0;
m = i;
while(m <= n / 2){
num ++;
m *= 2;
}
total += num / 2;
}
cout << total << endl;
return 0;
}
4、3464:练83.4 分解因数
#include<bits/stdc++.h>
using namespace std;
int sum;
void f(int x,int y)
{
for(int i=x;i<y;i++)
{
if(y%i==0&&i<=y/i)
{
sum++;
f(i,y/i);
}
if(i>y/i)
return;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
sum=1;
int n;
cin>>n;
f(2,n);
cout<<sum<<endl;
}
return 0;
}
/*
3464:练83.4 分解因数
http://bas.ssoier.cn:8086/problem_show.php?pid=3464
https://blog.csdn.net/Wchenchen0/article/details/81077489
https://www.cnblogs.com/dks0313/p/16513724.html
https://blog.csdn.net/qq_40802813/article/details/119429101
https://blog.csdn.net/qq_26919935/article/details/77773688
*/
#include<bits/stdc++.h>
using namespace std;
int sum;
void f(int x,int y)
{
for(int i=x;i<y;i++)
{
if(y%i==0&&i<=y/i)
{
sum++;
f(i,y/i);
}
if(i>y/i)
return;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
sum=1;
int n;
cin>>n;
f(2,n);
cout<<sum<<endl;
}
return 0;
}
5、3465:练83.5 二分查找2
#include <bits/stdc++.h>
using namespace std;
int n,a[30000+10],q;
int main( void )
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
cin>>q;
for(int k;q--;)
{
scanf("%d",&k);
int lft=1,rht=n;
while(lft<=rht){
int m=(lft+rht)>>1;
if( a[m]<=k)
{
lft=m+1;
}
else
{
rht=m-1;
}
}
printf("%d ",a[rht]==k?rht:-1);
}
return 0;
}
6、3466:【例84.1】 取余运算
[例84.1] 取余运算
1326:【例7.5】 取余运算(mod)
【信息学奥赛一本通-编程启蒙】3466【例84.1】 取余运算
#include<iostream>
#include<cstdio>
using namespace std;
int b,p,k,a;
//利用分治求b^p%k
int f(int p)
{
// b^0 %k=1
if (p==0) return 1;
int tmp=f(p/2)%k;
tmp=(tmp*tmp) % k;
// b^p %k=(b^(p/2))^2 % k
//如果p为奇数,则 b^p %
if (p%2==1) tmp=(tmp * b) %k;
return tmp; //k=((b^(p/2))^2)* b%k
}
int main( void )
{
//读入3个数
cin>>b>>p>>k;
//将b的值备份
int tmpb=b;
//防止b太大
b%=k;
//输出
printf("%d^%d mod %d=%d\n",tmpb,p,k,f(p));
return 0;
}
7、3467:【例84.2】分香蕉
【信息学奥赛一本通-编程启蒙】3467【例84.2】分香蕉
蓝桥杯历年真题 猴子分香蕉C/C++
第9届 蓝桥杯c++A组 猴子分香蕉
算法题每日一练---第1天:猴子分香蕉
#include <bits/stdc++.h>
using namespace std;
int n,m,a[100010],b[100010],id[100010];
long long ans[100010];
int main( )
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<m;i++)
{
scanf("%d",&b[i]);
id[i]=i;
}
sort(a,a+n,greater<int>());
sort(id,id+m,[&](int i,int j){return b[i]>b[j];} );
for(int i=0,j=0;i<n;i++)
{
int k=id[j];
ans[k]+=a[i];
j=j+1==m?0:j+1;
}
for(int i=0;i<m;i++)
{
printf("%lld ",ans[i]);
}
return 0;
}
8、3468:练84.1 2011n次方的后四位
练 84.1 2011的n 方后四位
1234:2011
2011(信息学奥赛一本通-T1234)
信息学奥赛一本通 1234:2011
C+1234 2011
#include<stdio.h>
#include<string.h>
// m^n % k
long long quickpow(long long m,long long n,long long k)
{
long long ans = 1;
while (n > 0)
{
if (n & 1)
ans = (ans*m)%k;
n = n >> 1 ;
m = (m*m)%k;
}
return ans;
}
int main(int argc, char *argv[])
{
int k;
int i;
char n[205];
int N,len;
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%s",n);getchar();
N=0;
len=strlen(n);
N=n[len-1]-'0';
if(len>=2) N=(n[len-2]-'0')*10+N;
if(len>=3) N=(n[len-3]-'0')*100+N;
if(len>=4) N=(n[len-4]-'0')*1000+N;
N=N%500;
printf("%lld\n",quickpow(2011,N,10000));
}
return 0;
}
9、3469:练84.2 光荣的梦想
练84.2光荣的梦想
1328:【例7.7】光荣的梦想
分治算法,例题,光荣的梦想
归并排序-光荣的梦想
信息学奥赛一本通 1328:【例7.7】光荣的梦想
/*
1328:【例7.7】光荣的梦想
http://ybt.ssoier.cn:8088/problem_show.php?pid=1328
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
#define INF 999999999
#define N 1000001
#define MOD 1000000007
using namespace std;
int n;
int a[N],b[N];
long long ans=0;
void msort(int left,int right)
{
int mid=(left+right)/2;
if(left>=right)
return ;
msort(left,mid);
msort(mid+1,right);
int i=left,j=mid+1,n=mid,m=right,k=0;
while(i<=n&&j<=m)
if(a[i]>a[j])
{
ans+=n-i+1;
b[k++]=a[j++];
}
else
b[k++]=a[i++];
while(i<=n)
b[k++]=a[i++];
while(j<=m)
b[k++]=a[j++];
for(i=0;i<k;i++)
a[left+i]=b[i];
}
int main( void )
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
msort(1,n);
cout<<ans<<endl;
return 0;
}
10、3470:【例85.1】 金银岛
[例85.1] 金银岛
1225:金银岛
信息学奥赛一本通1225:金银岛
信息学奥赛 1225-金银岛
T217592 金银岛(信息学奥赛一本通-T1225)
/*
1225:金银岛
http://ybt.ssoier.cn:8088/problem_show.php?pid=1225
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define INF 999999999
#define N 101
using namespace std;
struct node
{
int w;
int c;
double g;
}a[N],temp;
int main( void )
{
int t;
int W,m;
cin>>t;
while(t--)
{
double cnt=0;
cin>>W>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].w>>a[i].c;
a[i].g=a[i].c*1.0/a[i].w;
}
for(int i=1;i<=m;i++)
for(int j=i+1;j<=m;j++)
if(a[i].g<a[j].g)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(int i=1;i<=m;i++)
{
if(W>=a[i].w)
{
cnt+=a[i].c;
W-=a[i].w;
}
else
{
cnt+=a[i].g*W;
break;
}
}
printf("%.2lf\n",cnt);
}
return 0;
}
1、啊哈编程星球
适用于:编程初学者、小学一至三年级
2、慧通教育
适用于:编程初学者、小学生编程入门
3、《信息学奥赛一本通 编程启蒙》C++版
适用于:编程初学者、小学生编程启蒙
争取在小学1-4年级就将2、3两个题库的全部或大部分题 做完
为进一步深入学习信奥打好坚实的基础
4、信息学奥赛一本通
5、洛谷
洛谷题单广场
6、AcWing
7、编程魔法师