#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long long sum=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int t=i;
int flag=0;
while(t)
{
if(t%10==2||t%10==0||t%10==1||t%10==9)
{
flag=1;
break;
}
t/=10;
}
if(flag) sum+=(long long)i;
}
printf("%lld",sum);
return 0;
}
完全二叉树的权值
cs复制代码
#include <stdio.h>
#include <math.h>
#include <limits.h>
#define MAX 100005
int main(int argc, char *argv[])
{
int n;
scanf("%d",&n);
int a[100005];
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int depth=1;
int ans_depth=1;
int start=1,end=1;
int max=-100000;
while(end<n)
{
int sum=0;
end=pow(2,depth)-1;
if(end>n) end=n;
for(int i=start;i<=end;i++)
{
sum+=a[i];
}
if(sum>max)
{
max=sum;
ans_depth=depth;
}
start=end+1;
depth++;
}
printf("%d",ans_depth);
return 0;
}
等差数列
cs复制代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 100005
int cmp(const void *a,const void *b)
{
long long pa=*(long long*)a;
long long pb=*(long long*)b;
return (pa>pb)-(pa<pb);
}
long long gcd(long long a,long long b)
{
while(b)
{
long long t=b;
b=a%b;
a=t;
}
return a;
}
int main(int argc, char *argv[])
{
int n;
scanf("%d",&n);
long long a[100005];
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
qsort(a,n,sizeof(long long),cmp);
if(a[0]==a[n-1])
{
printf("%d",n);
return 0;
}
if(n==1)
{
printf("1");
return 0;
}
long long d=a[1]-a[0];
for(int i=2;i<n;i++)
{
d=gcd(d,a[i]-a[i-1]);
}
long long x=(a[n-1]-a[0])/d+1;
printf("%lld",x);
return 0;
}
后缀表达式
cs复制代码
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
long long pa = *(long long*)a;
long long pb = *(long long*)b;
return (pa > pb) - (pa < pb);
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
long long a[200005];
int total = n + m + 1;
for (int i = 0; i < total; i++) {
scanf("%lld", &a[i]);
}
qsort(a, total, sizeof(long long), cmp);
long long sum = 0;
for (int i = 0; i < total; i++) {
sum += a[i];
}
if (m == 0) {
printf("%lld", sum);
return 0;
}
if (a[0] >= 0) {
// 全正数
printf("%lld", sum - 2 * a[0]);
}
else if (a[total - 1] <= 0) {
// 全负数
printf("%lld", -sum + 2 * a[total - 1]);
}
else {
// 有正有负
long long abs_sum = 0;
for (int i = 0; i < total; i++) {
abs_sum += llabs(a[i]);
}
printf("%lld", abs_sum);
}
return 0;
}