zoukankan      html  css  js  c++  java
  • codeforces D. Toy Sum 解题报告

    题目链接:http://codeforces.com/problemset/problem/405/D

    题目意思:从 1 ~ 1000000 中选择 n 个数:x1,x2,...,xn,对 x1-1,x2-1,...xn-1 求和得s1。然后在 1 ~ 1000000 中除已经选择过的n个数中选择一些数,假设为y1, y2,...ym,设s = 1000000,对s-y1,s-y2,...,s-ym求和,如果这个和与s1相等,则输出y1,y2,...,ym

         可以这样想,由于集合X中:x1,x2,...,xn 是各不相同的,那么在S - X,设为Y(假定S是全集:1,2,...,n)对每个数xi(i : 1 ~ n)一定有相应的s-i+1与之对应(前提是,如果S-xi不在集合X中);如果有相应的s-xi+1在X中,那么可以找没有选择过的yj,s-yj+1来替换xi, s-xi+1。例如X中有 100, 999901而没有99, 999902,那么可以选择99, 999902来替代。效果是相同的。这样Y中的数量跟n是相同的。

         

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 1e6;
     8 int x[maxn];
     9 
    10 int main()
    11 {
    12     int n, i, j, t;
    13     while (scanf("%d", &n) != EOF)
    14     {
    15         memset(x, 0, sizeof(x));
    16         for (i = 0; i < n; i++)
    17         {
    18             scanf("%d", &t);
    19             x[t] = 1;
    20         }
    21         printf("%d
    ", n);
    22         int cnt = 0;
    23         for (i = 1; i <= maxn; i++)
    24         {
    25             if (x[i] && !x[maxn-i+1])
    26             {
    27                  printf("%d ", maxn-i+1);
    28                  cnt++;
    29             }
    30         }
    31         for (i = 1; i <= maxn && cnt != n; i++)
    32         {
    33             if (!x[i] && !x[maxn-i+1])
    34             {
    35                 printf("%d %d ", i, maxn-i+1);
    36                 cnt += 2;
    37             }
    38         }
    39         printf("
    ");
    40     }
    41     return 0;
    42 }

         

  • 相关阅读:
    MySQL 一般模糊查询的几种用法
    MySQL插入中文数据报错
    BeanUtils.populate 的作用
    分分钟搞定 JSP 技术
    margin-top相对谁的问题
    常用汉字的Unicode码表
    从InputStream到String_写成函数
    Http请求和响应应用
    发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
    导出到excel
  • 原文地址:https://www.cnblogs.com/windysai/p/3619222.html
Copyright © 2011-2022 走看看