A. Dreamoon and Stairs:由题可知范围一定是在 n/2 ~ n中的,然后看对m是否能取整
#include<stdio.h>
#include<string.h>
int main()
{
int n, m;
while(~scanf("%d %d", &n, &m))
{
int l = n / 2 + (n % 2);
int x = -1;
for(int i = l; i <= n; i++)
{
if(i % m == 0)
{
x = i;
break;
}
}
printf("%d\n", x);
}
return 0;
}
B. Dreamoon and WiFi:爆搜所有可能
#include<stdio.h>
#include<string.h>
char a[1005], b[1005];
int n, res, sum;
void dfs(int now, int num)
{
if(now == strlen(a))
{
if(num == n)
res++;
sum++;
return;
}
if(b[now] == '+')
dfs(now + 1, num + 1);
else if(b[now] == '-')
dfs(now + 1, num - 1);
else
{
dfs(now + 1, num + 1);
dfs(now + 1, num - 1);
}
}
int main()
{
while(~scanf("%s%s", a, b))
{
n = 0;
for(int i = 0; a[i]; i++)
{
n += (a[i] == '+')? 1: -1;
}
res = sum = 0;
dfs(0, 0);
printf("%.12f\n", double(res) / double(sum));
}
return 0;
}
C. Dreamoon and Sums:找规律额。。
#include<cstdio>
#include<cstring>
#define LL __int64
#define mod 1000000007
int main()
{
LL a,b;
LL sum;
while(scanf("%I64d%I64d",&a,&b)!=EOF)
{
sum=0;
for(LL j=1;j<=a;j++)
{
sum+=((j*b)%mod+1)%mod;
sum%=mod;
}
LL ans=(((b-1)*b)/2)%mod;
printf("%I64d\n",(sum*ans)%mod);
}
return 0;
}