zoukankan      html  css  js  c++  java
  • Codeforces Round #289 (Div. 2, ACM ICPC Rules)

    A题:

    有一个n*n的矩阵,矩阵的第一行和第一列的值都为1,其余的有:

    a[i][j]=a[i-1][j]+a[i][j-1];

    现在给出一个n求出这个n*n的矩阵中最大的数。

    显然,最大的数就是a[n][n]。

    因为n<=10,所以先预处理出一个10*10的矩阵,然后每输入一个n,直接输出a[n][n].

     1 #include<cstdio>
     2 int maze[11][11];
     3 int main()
     4 {
     5     for(int i=1;i<=10;i++)
     6         maze[i][1]=1;
     7     for(int i=1;i<=10;i++)
     8         maze[1][i]=1;
     9     for(int i=2;i<=10;i++){
    10         for(int j=2;j<=10;j++)
    11             maze[i][j]=maze[i-1][j]+maze[i][j-1];
    12     }
    13     int n;
    14     while(scanf("%d",&n)!=EOF){
    15         printf("%d
    ",maze[n][n]);
    16     }
    17     return 0;
    18 }
    View Code

     B题:

    有n堆石头,第i堆石头有a[i]个,现在有k种不同颜色的染料,现在要对这n堆石头的每一个进行染色。

    要求:每个石头都要染色,但不是所有颜色都必须用到。 let's say that bi, c is the number of pebbles of color c in the i-th pile. Then for any 1 ≤ c ≤ k1 ≤ i, j ≤ n the following condition must be satisfied |bi, c - bj, c| ≤ 1. It isn't necessary to use all k colors: if color c hasn't been used in pile i, then bi, c is considered to be zero.

    想法:

    1.找出最小的一堆和最大的一堆。对于最小的一堆,根据贪心,最小的一堆里,每个石头应该尽量染成不同的颜色。

    若k>=min:则min有min种颜色,则最大的一堆可以到达min+min*1+(k-min)*1=min+k

    若0.5*min<k<min:则最大可到达k+k*1+min-k=min+k

    若k<0.5*min,k<0.25*min:都可证最大的一堆:min+k

    结论:最大的一堆<=min+k

    2.对于每一堆,尽量不断重复用1到k进行染色,直到a[i] 染完。

    可以用一个数b记录输出的数量,每输出一个数,b++;

    if( b==a[i])

      printf(" ");

    else 

      printf(" ");//表示输出空格

    在嵌套循环里面,大循环和小循环不要用同一个变量做下标,我刚才都是用i,i。哭晕在厕所。

     1 #include<cstdio>
     2 using namespace std;
     3 const int inf=0x3f3f3f3f;
     4 const int maxn=105;
     5 int a[maxn];
     6 int main()
     7 {
     8     int n;//the number of array
     9     int k;//the number of color
    10     while(scanf("%d%d",&n,&k)!=EOF){
    11         for(int i=1;i<=n;i++){
    12             scanf("%d",&a[i]);
    13         }
    14         int max=-inf;
    15         int min=inf;
    16         for(int i=1;i<=n;i++){
    17             if(a[i]>max)
    18                 max=a[i];
    19             if(a[i]<min)
    20                 min=a[i];
    21         }
    22         if(max-min>k){
    23             printf("NO
    ");
    24             continue;
    25         }
    26         printf("YES
    ");
    27         for(int i=1;i<=n;i++){
    28             int b=0;
    29             int num=a[i]/k;
    30             for(int j=1;j<=num;j++){
    31                 for(int l=1;l<=k;l++){
    32                     printf("%d",l);
    33                     b++;
    34                     if(b<a[i])
    35                         printf(" ");
    36                     else
    37                         printf("
    ");
    38                 }
    39             }
    40             int rest=a[i]-num*k;
    41             for(int j=1;j<=rest;j++){
    42                 printf("%d",j);
    43                 b++;
    44                 if(b<a[i])
    45                     printf(" ");
    46                 else
    47                     printf("
    ");
    48             }
    49         }
    50     }
    51     return  0;
    52 }
    View Code

     

  • 相关阅读:
    Python Day23
    Python Day22
    Python Day21
    Python Day20
    Python Day19
    Python Day18
    Python Day17
    python全栈开发 * 18 面向对象知识点汇总 * 180530
    python全栈开发 * 15知识点汇总 * 180621
    python全栈开发 * 14 知识点汇总 * 180530
  • 原文地址:https://www.cnblogs.com/-maybe/p/4383564.html
Copyright © 2011-2022 走看看