Codeforces Round #353 (Div. 2)

A. Infinite Sequence

题意:已知一个等差数列的第一项a和公差c,问b是不属于这个等差数列。

分析:求d=b-a,再根据d和c的符号来判断。如果d和c同号,且d能整除c,那么b是。如果d==0,那么说明a==b,肯定是可以的,也可能的c==0,那么这个数列是常数数列,肯定是不可以的。如果d和c异号,那么根据第一项的增加或者减少都是不肯到b 的,肯定不能啦。

代码:

 1 /*A*/
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     long long a,b,c;
 8     while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF)
 9     {
10         long long d=b-a;
11         if(d*c>0)
12         {
13             if(d%c==0)
14                 printf("YES
");
15             else
16                 printf("No
");
17         }
18         else if(d*c==0)
19         {
20             if(d==0)
21                 printf("YES
");
22             else
23                 printf("NO
");
24         }
25         else
26             printf("NO
");
27     }
28     return 0;
29 }
View Code

B. Restoring Painting

题意:有一个3*3的方格,里面已经填好了a,b,c,d,现在需要用1~n是数字来填满这个方阵,使得任意一个2*2的方阵里数字的和等于左上角2*2方格里的数字之和。问有多少种满足条件的填法。

分析:题目的意思就是要左上角A,右上角B,左下角C,右下角D四个2*2的方格中的数字分别加起来要相等。给出a,b,c,d后,A=a+b,B=a+c,C=b+d,D=c+d。我们先填中间的数字,这个数字属于四个方格,所以最后每个方格都要加上这个数字,所以A,B,C,D的差值是不变的,而最后填的四个角,就需要来抵消这个差值,使得四个方格相等。所以最后的答案就是中间格子可以填的种数乘四个角可以填的种数。中间n个数字都可以填,因为是不会影响差值的。四个角可以填的个数则要看差值是多少,可以填的种数=n-差值。如果差值为0,那么每个数都可以填,如果差值为1,那么最大的那个数是不可以填到数字最大的那个格子里的,因为其他格子就无法满足了。

注意:当n-差值<=0时,方法数为0,而且要用long long 。

代码:

 1 /*B*/
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 long long Max(long long  a,long long  b,long long  c,long long  d)
 7 {
 8     long long  t;
 9     t=max(a,b);
10     t=max(t,c);
11     t=max(t,d);
12     return t;
13 }
14 long long  Min(long long  a,long long  b,long long  c,long long  d)
15 {
16     long long  t;
17     t=min(a,b);
18     t=min(t,c);
19     t=min(t,d);
20     return t;
21 }
22 
23 
24 int main()
25 {
26     long long  n;
27     long long  a,b,c,d;
28     while(scanf("%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&c,&d)!=EOF)
29     {
30         long long  A,B,C,D;
31         A=a+b;B=a+c;
32         C=b+d;D=c+d;
33         long long  mmax=Max(A,B,C,D);
34         long long  mmin=Min(A,B,C,D);
35         long long  d=mmax-mmin;
36         long long  ans;
37         if((n-d)<0)
38             ans=0;
39         else
40             ans=(n-d)*n;
41         printf("%I64d
",ans);
42     }
43     return 0;
44 }
原文地址:https://www.cnblogs.com/yepiaoling/p/5502873.html