握手问题
cs
复制代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int sum=0;
for(int i=49;i>=7;i--)
{
sum+=i;
}
printf("%d",sum);
return 0;
}
小球反弹
cs
复制代码
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
long long t=1,x=343720,y=233333;
while(1)
{
if((15*t)%x==0&&(17*t)%y==0) break;
t++;
}
printf("%.2f",2*sqrt(15*15*t*t+17*17*t*t));
return 0;
}
好数
cs
复制代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n;
scanf("%d",&n);
int cnt=0;
for(int i=1;i<=n;i++)
{
int a[10000005];
int idx=1;
int t=i;
while(t)
{
a[idx++]=t%10;
t/=10;
}
int flag=1;
for(int j=1;j<=idx;j++)
{
if(j%2==1)
{
if(a[j]%2==0)
{
flag=0;
break;
}
}
else
{
if(a[j]%2==1)
{
flag=0;
break;
}
}
}
if(flag) cnt++;
}
printf("%d",cnt);
return 0;
}
R 格式
cs
复制代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX 2000
int main(int argc, char *argv[])
{
int n;
char d[1025];
int b[MAX]={0};
int b_len=0;
int sum=0,k=0;
int i;
scanf("%d %s",&n,d);
for(int i=strlen(d)-1;i>=0;i--)
{
if(d[i]!='.')
{
if(b_len<MAX)
{
b[b_len]=d[i]-'0';
b_len++;
}
}
else k=sum;
sum++;
}
for(int i=0;i<n;i++)
{
int carry=0;
for(int j=0;j<b_len;j++)
{
b[j]=b[j]*2+carry;
if(b[j]>=10)
{
carry=b[j]/10;
b[j]=b[j]%10;
}
else carry=0;
}
if(carry)
{
if(b_len<MAX)
{
b[b_len]=carry;
b_len++;
}
}
}
if(k>0&&b[k-1]>=5)
{
int carry=1;
for(i=k;i<b_len;i++)
{
b[i]=b[i]+1;
if(b[i]<=9)
{
carry=0;
break;
}
else b[i]-=10;
}
if(carry)
{
if(b_len<MAX)
{
b[b_len]=1;
b_len++;
}
}
}
for(i=b_len-1;i>=k;i--)
{
printf("%d",b[i]);
}
return 0;
}
宝石组合
cs
复制代码
#include <stdio.h>
#include <string.h>
#define N 500010
int gem[N];
int num[N];
int main(int argc, char *argv[])
{
int n;
scanf("%d",&n);
int max=-0x3f3f3f3f;
for(int i=0;i<n;i++)
{
scanf("%d",&gem[i]);
num[gem[i]]++;
if(gem[i]>max) max=gem[i];
}
for(int i=max;i>=1;i--)
{
int tmp[3];
int pos=0;
int cnt=0;
for(int j=i;j<=max;j+=i)
{
if(num[j])
{
cnt+=num[j];
for(int k=0;k<num[j]&&pos<3;k++)
{
tmp[pos++]=j;
}
}
if(cnt>=3) break;
}
if(cnt>=3)
{
for(int j=0;j<3;j++)
{
printf("%d ",tmp[j]);
}
printf("\n");
break;
}
}
return 0;
}
数字接龙
cs
复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n,k;
int g[11][11];
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
char path[121];
int path_len=0;
int st[11][11];
int edge[11][11][11][11];
int dfs(int a,int b)
{
if(a==n-1&&b==n-1)
{
return path_len==n*n-1;
}
st[a][b]=1;
for(int i=0;i<8;i++)
{
int x=a+dx[i],y=b+dy[i];
if(x<0||x>=n||y<0||y>=n) continue;
if(st[x][y]) continue;
if(g[x][y]!=(g[a][b]+1)%k) continue;
if(i%2&&(edge[a][y][x][b]||edge[x][b][a][y])) continue;
edge[a][b][x][y]=1;
path[path_len++]=i+'0';
if(dfs(x,y)) return 1;
path_len--;
edge[a][b][x][y]=0;
}
st[a][b]=0;
return 0;
}
int main(int argc, char *argv[])
{
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&g[i][j]);
}
}
memset(st,0,sizeof(st));
memset(edge,0,sizeof(edge));
path_len=0;
if(!dfs(0,0)) printf("-1\n");
else
{
path[path_len]='\0';
printf("%s\n",path);
}
return 0;
}
拔河
cs
复制代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 1004
typedef long long ll;
ll min(ll a,ll b)
{
return a<b?a:b;
}
ll abs_ll(ll x)
{
return x<0?-x:x;
}
int main() {
int n;
scanf("%d",&n);
ll a[N];
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
ll ans=1e14;
for(int l=1;l<=n;l++)
{
for(int r=n;r>l;r--)
{
int i=l,j=r;
ll sum1=a[i],sum2=a[j];
ans=min(ans,abs_ll(sum1-sum2));
if(ans==0)
{
printf("0");
return 0;
}
while(i+1<=j)
{
if(sum1==sum2)
{
printf("0");
return 0;
}
if(sum1>sum2)
{
j--;
sum2+=a[j];
}
else if(sum1<sum2)
{
i++;
sum1+=a[i];
}
ans=min(ans,abs_ll(sum1-sum2));
}
}
}
printf("%lld",ans);
return 0;
}