#include<stdio.h>
#include<string.h>
int a[25][6];
int maxx=0;
int book[21];
void dfs(int x,int sum)
{
if(x==6){
if(sum>maxx)
{
maxx=sum;
}
return;
}
for(int i=1;i<=20;i++)
{
if(book[i]==0)
{
book[i]=1;
dfs(x+1,sum+a[i][x]);
book[i]=0;
}
}
}
int main()
{
for(int i=1;i<=20;i++)
for(int j=1;j<=5;j++)
{
scanf("%d",&a[i][j]);
}
dfs(1,0);
printf("%d",maxx);
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char a[10];
int n=2019;
int l=0;
while(n!=0)
{
int t=n%26;
n=n/26;
a[l]=t+'A'-1;
l++;
}
for(int i=l-1;i>=0;i--)
{
printf("%c",a[i]);
}
return 0;
}
#include<stdio.h>
#include<string.h>
int a[5];
int main()
{
a[0]=1;
a[1]=1;
a[2]=1;
int n=3;
while(n<20190324)
{
a[n%3]=(a[0]+a[1]+a[2])%10000;
n++;
}
printf("%d",a[(n-1)%3]);
return 0;
}
#include<stdio.h>
#include<string.h>
int ok(int n)
{
while(n!=0)
{
int t=n%10;
n=n/10;
if(t==2||t==4)
{
return 0;
}
}
return 1;
}
int ans=0;
int main()
{
for(int i=1;i<2019;i++)
{
if(ok(i))
{
for(int j=i+1;j<2019;j++)
{
if(ok(j))
{
int k=2019-i-j;
if(k>j&&ok(k))
{
ans++;
}
}
}
}
}
printf("%d",ans);
return 0;
}
#include<stdio.h>
#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;
int n,m;
struct node{
int x,y,step;
string s;
}p,q;
int st;
string stt;
int mapp[501][501];
char f[4]={'D','L','R','U'};
int to[4][2]={{1,0},{0,-1},{0,1},{-1,0}};
int book[501][501];
int flag;
void bfs(int x,int y,int step){
queue<node>Q;
q.x=x;
q.y=y;
q.step=0;
book[q.x][q.y]=1;
Q.push(q);
while(!Q.empty()){
q=Q.front();
Q.pop();
if(q.x==n&&q.y==m)
{
flag=1;
st=q.step;
stt=q.s;
break;
}
for(int k=0;k<4;k++)
{
p.x=q.x+to[k][0];
p.y=q.y+to[k][1];
if(p.x>0&&p.y>0&&p.x<=n&&p.y<=m&&book[p.x][p.y]==0&&mapp[p.x][p.y]==0)
{
p.s=q.s+f[k];
book[p.x][p.y]=1;
p.step=q.step+1;
Q.push(p);
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
flag=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&mapp[i][j]);
}
bfs(1,1,0);
if(flag)
{
printf("%d\n",st);
cout<<stt;
}
return 0;
}
#include<stdio.h>
int ok(int n)
{
while(n!=0)
{
int t=n%10;
n=n/10;
if(t==2||t==0||t==1||t==9)
return 1;
}
return 0;
}
int main()
{
int n;
int sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
if(ok(i))
sum+=i;
}
printf("%d",sum);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<math.h>
int a[100001];
int sum[1000];
int main()
{
int n;
scanf("%d",&n);
int sd=log2(n+1);
int l=0;
int g=0;
int flag=0;
for(int i=1;i<=sd;i++)
{
for(int j=1;j<=pow(2,i-1);j++)
{
scanf("%d",&a[l]);
g++;
sum[i]+=a[l];
l++;
if(g>n)
{
break;
}
}
}
int max=-99999;
int k;
for(int i=1;i<=sd;i++){
if(sum[i]>max)
{
max=sum[i];
k=i;
}
}
printf("%d",k);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[100001];
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
int minn=a[2]-a[1];
if(minn==0)
{
printf("%d",n);
}
else{
for(int i=3;i<=n;i++)
{
minn=gcd(minn,a[i]-a[i-1]);
}
printf("%d",(a[n]-a[1])/minn+1);
}
return 0;
}
例 1 2 3 4 5 + + + + <1+2+3+4+5>, 1 2 3 4 5 + + - - <5+4+3-(1-2)=5+4+3+2-1>, 1 2 3 4 5 - - - -<5-(1-2-3-4)=5+4+3+2-1>, /除了最小的数其他都可以变为正数/
一。如果都是正数
①如果减号个数为0
则是所有数相加
1.②否则
除了最小的数 ,其他数相加减最小的=其他数的绝对值相加减最小的。
-1 -2 -3 -4 -5 + + - - <-1-(-5+ -4-(-3+ -2))> ,-1 -2 -3 -4 -5 + + + + <-5+ -4+ -3+ -2+ -1>,-1 -2 -3 -4 -5 - - - - <-1 - -2 - -3 - -4 - -5>/除了最大的数其他的都可以变为正数/
二。如果全为负数
①如果减号为0
则所有的数相加
2.②否则
除最大的数,其他数的绝对值相加加最大的数=其他所有数的绝对值相加减绝对值最小的
三。有正有负
/负的能通过减号变为正的/
所以依旧是全部的绝对值加起来减去绝对值最小的那个。
综上
如果减号个数为0则 全部数相加,
否则
其他数的绝对值相加减去绝对值最小的
#include<stdio.h>
#include<string.h>
#include<math.h>
int a[100100];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int maxx=1,minn=1;
for(int i=1;i<=n+m+1;i++)
{
scanf("%d",&a[i]);
if(a[minn]>a[i])
{
minn=i;
}
if(a[maxx]<a[i])
{
maxx=i;
}
}
long long sum=0;
if(m==0)
{
for(int i=1;i<=n+m+1;i++)
{
sum+=a[i];
}
printf("%lld",sum);
}
else
{
for(int i=1;i<=n+m+1;i++)
{
sum+=fabs(a[i]);
}
sum=sum-fabs(a[maxx])-fabs(a[minn])+a[maxx]-a[minn];
printf("%lld",sum);
}
return 0;
}
视频讲解链接
https://www.bilibili.com/video/av47356111
#include<cstring>
#include<iostream>
#include<algorithm>
#include<limits.h>
using namespace std;
typedef long long LL;
const int N = 300010;
int n;
LL s[N],a[N];
bool ss[N];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
s[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&s[i]);
s[i]+=s[i-1];
}
LL s0=s[0],sn=s[n];
if(s0>sn) swap(s0,sn);
sort(s,s+n+1);
for(int i=0;i<=n;i++)
{
if(s[i]==s0)
{
s0=i;
break;
}
}
for(int i=n;i>=0;i--)
{
if(s[i]==sn){
sn=i;
break;
}
}
memset(ss,0,sizeof ss);
int l=0,r=n;
for(int i=s0;i>=0;i-=2)
{
a[l++]=s[i];
ss[i]=true;
}
for(int i=sn;i<=n;i+=2)
{
a[r--]=s[i];
ss[i]=true;
}
for(int i=0;i<=n;i++)
{
if(!ss[i])
a[l++]=s[i];
}
LL res=0;
for(int i=1;i<=n;i++)
res=max(res,abs(a[i]-a[i-1]));
cout << res << endl;
}
return 0;
}