城市商业街主干道是一条笔直的道路,商业街里有 n 家店铺,现给定 n 个店铺的位置,请在这条道路上找到一个中心点,使得所有店铺到这个中心点的距离之和最小,并输出这个最小值。
这个中间相差我们任意一点到达是两边的和一定是大减小
#include <bits/stdc++.h>
using namespace std;
int a[100000];
int n;
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>a[i];}sort(a+0,a+n);int i=0;int sum=0;int j=n-1;while(i<j){sum=sum+(a[j]-a[i]);i++;j--;}cout<<sum;return 0;
}
图书馆的书籍分类系统使用二进制标签管理,0 代表儿童读物,1 代表青少年书籍。管理员发现当前的书架排列中不允许出现青少年书籍之后连接儿童读物的情况(即 10 子串)。管理员每次可以交换任意两本书的位置。请计算让书架符合规定所需的最少操作次数。
字符串的检测
是不是可以和任意位置交换,所以我们只需要统计出这个字符中间的零有多少倍
然后看一下前面有多少这个串里面有多少个零,我们只统计零这个零的个数就行了。
#include <bits/stdc++.h>
using namespace std;
string s;
int main()
{cin>>s;int n=s.size();int cnt=0;for(int i=0;i<n;i++){if(s[i]=='0') cnt++;}int cnt1=0;for(int i=0;i<cnt;i++){if(s[i]=='1') cnt1++;}cout<<cnt1;return 0;
}
你收集了 n 张卡片,按照收集的时间顺序编号 1 到n 并依次排列,每张卡片上标有一个数值。现在突发奇想,想知道在这些卡片中,若每次挑选两张卡片,会有多少对不同的组合满足两张卡片的数值和恰好为 0,请你计算出符合条件的卡片组合的数量。
距离最远的最有可能形成零最大的和最小的加起来等于零
什么数加起来有可能是零,就是最大的和最小的,最接近0
双指针运算
#include <bits/stdc++.h>
using namespace std;
int a[10000];
int n;
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>a[i];}sort(a+0,a+n);int i=0;int j=n-1;int cnt=0;while(i<j){if(a[i]+a[j]==0){cnt++;i++;j--;}else if(a[i]+a[j]>0){j--;}else if(a[i]+a[j]<0){i++;}}cout<<cnt;return 0;
}
给定一个正整数 n,从数字 1 到 n 中选择若干个数字(所选集合不能为空),且任意两个被选中的数字在数轴上不能相邻。求符合条件的方案数,结果对 1000000007 取模。
#include <bits/stdc++.h>
using namespace std;
int n;
int a[10000],b[10000];
int f(int);
int main()
{cin>>n;b[1]=2;b[2]=3;for(int i=3;i<=n;i++){b[i]=b[i-1]+b[i-2];}int sum=0;for(int i=1;i<=n;i++){sum=sum+b[i];}cout<<sum;return 0;
}