• codeforces A. Xenia and Divisors 解题报告


    题目链接:http://codeforces.com/problemset/problem/342/A

    题目意思:给出n个数,找出n/3个组且每组有3个数,这三个数必须要符合两个条件:1、a < b < c;2、b mod a = 0 和 c mod b =0。如果找不到,输出-1。

          其实每组内只可能是这三组数的其中一组:1 2 4; 1 2 6; 1 3 6

          以下注释部分读者可以直接忽略。

         /*

          刚开始想得很复杂,三个数组分别存储初始数s,记录已输出的数 vis 还有经判断符合条件将要输出的数a。sort从小到大排序,每组数里面的三个数的范围分别是0~n/3,n/3~2n/3和2n/3~n。可想而知,TLE!!!

          后来再想,得出每组数的第一个数绝对是1且和n的个数是相等的,输入序列中只要存在5或者7,就绝对是不符合条件的。2、4、6的个数如何确定?本来有种很笨的方法,就是输入的同时统计1、2、4、6的个数,存到c1、c2、c4和c6中,每输出一个就在相应的ci(i=1、2、4 or 6)减1。但是如果不符合如何回溯???总之就是简单问题复杂化了。不堪入目啊!!!

        */

         此题分类竟然是属于贪心和模拟,个人觉得像是数学题。

         这里的统计1、2、4、6的个数是对数组下标的灵活运用,temp暂时保存输入的数,则s[temp]即可以实现所保存数的个数统计。

         至于如何知道1 2 4、 1 2 6 和 1 3 6各有多少个?真心觉得是考个人的观察能力= =!1的总个数 = 2 和 3的总个数,额~~还是拿符号来讲。即 s[1] = s[2] + s[3],另外还有s[1] = s[4] + s[6],最后一条,十分值得注意:s[2] >= s[4],否则对于类似1 3 4 的数据是过不了的!!!!

      

     1 #include <iostream>
     2 #include <string.h>
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 using namespace std;
     6 
     7 const int maxn = 99999 + 5;
     8 int s[maxn];
     9 
    10 int main()
    11 {
    12     int n, i, flag, temp;
    13     while (scanf("%d", &n) != EOF)
    14     {
    15         flag = 1;
    16         memset(s, 0, sizeof(s));   // 每一轮一定要记得清零
    17         for (i = 0; i < n; i++)
    18         {
    19             scanf("%d", &temp);
    20             s[temp]++;   // 数组下标灵活运用
    21             if (temp == 5 || temp == 7)
    22                 flag = 0;    // 一旦有5和7,就绝对不符合条件了
    23         }
    24         if (flag && s[1] == s[2] + s[3] && s[1] == s[4] + s[6] && s[2] >= s[4])
    25         {
    26             for (i = 0; i < s[4]; i++)  // 每组数的个数,聪明的读者慢慢体会
    27                 printf("1 2 4\n");
    28             for (i = 0; i < s[6] - s[3]; i++)
    29                 printf("1 2 6\n");
    30             for (i = 0; i < s[3]; i++)
    31                 printf("1 3 6\n");
    32         }
    33         else
    34             printf("-1\n");                
    35     }
    36     return 0;
    37 }

      

       

       

       

       

  • 相关阅读:
    在ArcScene中为3D线设置纹理
    沿栅格单元边界生成块状等高线
    利用高程数据找出洼地和内部流域
    ArcMap 无法启动
    在分类渲染时,使用所有唯一值计算直方图
    ArcGIS三维分析扩展模块能否使用3ds max的模型
    如何创建带纹理的Multipatch
    云计算如“工业革命”般袭来 颠覆性改变需过安全关 狼人:
    金山毒霸2012正式公测 首次实现新病毒99秒查杀 狼人:
    瑞星:“云攻击”已成现实 狼人:
  • 原文地址:https://www.cnblogs.com/windysai/p/3307919.html
Copyright © 2020-2023  润新知