zoukankan      html  css  js  c++  java
  • [TC]SRM615 div1 250 AmebaDiv1

    题意:给你一个变形虫,初始大小未知,在一定时间顺序内它会遇到n个凝胶,如果这个凝胶大小和他大小一样,他的大小加倍。问你最后变形虫不可能的大小有多少个。

    解题思路:只有在n个凝胶大小出现过的值才会变,找出变化的即可 (做的慢掉分了)

    解题代码:

    // BEGIN CUT HERE
    /*
    
    */
    // END CUT HERE
    #line 7 "AmebaDiv1.cpp"
    #include <cstdlib>
    #include <cctype>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <string>
    #include <iostream>
    #include <sstream>
    #include <map>
    #include <set>
    #include <queue>
    #include <stack>
    #include <fstream>
    #include <numeric>
    #include <iomanip>
    #include <bitset>
    #include <list>
    #include <stdexcept>
    #include <functional>
    #include <utility>
    #include <ctime>
    using namespace std;
    
    #define PB push_back
    #define MP make_pair
    
    #define REP(i,n) for(i=0;i<(n);++i)
    #define FOR(i,l,h) for(i=(l);i<=(h);++i)
    #define FORD(i,h,l) for(i=(h);i>=(l);--i)
    
    typedef vector<int> VI;
    typedef vector<string> VS;
    typedef vector<double> VD;
    typedef long long LL;
    typedef pair<int,int> PII;
     struct node{
                long long x; int y ; 
     }a[300];
    
    int cmp1(const void *a ,const void *b)
    {
        if((*(node*) a).x == (*(node *)b).x)
          return(*(node*) a).y - (*(node *)b).y;
        return(*(node*) a).x - (*(node *)b).x;
    }
    class AmebaDiv1
    {
            public:
            int count(vector <int> X)
            {
               int n = X.size();
               for(int i = 0 ;i < n;i ++)
               {
                  long long ans = X[i];
                  for(int j = 0 ;j < n ;j ++)
                      if(X[j] == ans)
                          ans *= 2 ;
                  a[i].x = ans;
                  a[i].y = X[i] ; 
               }
               qsort(a,n,sizeof(node),cmp1);
               node b[1000];
               int bnum = 1; 
               b[1].x = a[0].x;
               b[1].y = a[0].y;
               for(int i =1; i< n;i ++)
               {
                  if(a[i].x != a[i-1].x || a[i].y != a[i-1].y  )
                    {
                      bnum ++ ; 
                      b[bnum].x = a[i].x;
                      b[bnum].y = a[i].y;
                    }           
               }
               int sum = 0 ;
               for(int i = 1;i <= bnum;i ++)
                   for(int j = 0 ; j < n ;j ++)
                   {
                     if(i >= 2 && b[i].x == b[i-1].x)
                         break;
                     if(b[i].x == X[j])
                     {
                      sum ++ ;
                      break;;
                     }
                   }
        
               return bnum-sum + tsum ;
            }
            
    
    };
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    5月29 流程
    5月27 权限设置及功能
    5月26 留言板练习题
    5月24 文件操作
    5月23 文件上传及图片上传预览
    5月23 注册审核
    5月21 回话控制SESSION COOKIE
    5月21 汽车查询及批量删除----php方法
    5月21 练习AJAX的查看详细及批量删除
    5月20 三级联动
  • 原文地址:https://www.cnblogs.com/zyue/p/3646233.html
Copyright © 2011-2022 走看看