• TopCoder 我们一起来


      已经很久没有做过tc了,虽然本来rating也不高,但是现在要是重新做起来的话可能一下就从div1掉到div2了。但是还是打算重新捡起来,真是觉得现在代码能力太弱,而且算法也几乎都忘得差不多了。一开始是想拿div2的250来给新学Java练练手,然后就想着顺带连C++也一起练吧。算法什么的遇到一个学一个好了。

      首先要安好插件,方便一点。http://www.cnblogs.com/zhj5chengfeng/archive/2013/03/11/2954743.html

      然后看了一下把4月4号的错过去了,明天晚上11点还有一场,估计再做的时候我就要在div2了呜呜。。先在practice room里做了一下4号的SRM615,顺道就练一下描述题意好了哈哈。

      

    SRM615_div2_250:AmebaDiv2

    题意:给一个数A和一个vector X,A顺次遇到X中数,如果和自己一样,就把自己变成2A,返回最终输出的数。X中最多200个数,数的范围是1到1000,000,000。

    题解:直接模拟,直接贴代码

     1         int simulate(vector <int> X, int A)
     2         {
     3             int N = X.size();
     4             for(int i = 0; i < N; i++)
     5             {
     6                 if( X[i] == A)
     7                     A = A << 1;
     8             } 
     9             return A;
    10         }
    View Code

    SRM615_div2_500:LongLongTripDiv2

    题意:D米长的路,跳T次,每次可以跳1米或B米,问能否可能。D is [1,10^18], T is [1,10^9], B is [2, 10^9],都是整数。

    题解:求二元一次方程组的整数解{x+y=T; x+By=D},只需要判断不能整数解的情况:1)D<T; 2)无整数解 3)跳的次数超过T才能跳够D米

     1         string isAble(long long D, int T, int B)
     2         {
     3             long long x = D-T;
     4             string yes = "Possible";
     5             string no = "Impossible";
     6             if(x < 0) return no;
     7             if(x%(B-1) != 0) return no;
     8             if(x/(B-1) > T) return no;
     9             return yes;
    10             
    11         }
    View Code

    SRM615_div1_250:AmebaDiv1

    题意:同div2_250,但是输入只有一个vector X,假设给一个整数A,求遍历一遍X之后不可能出现的A个数。

    题解:我是给想复杂了,一开始我想到了vector中没出现过的数,最终都可能出现,因为遍历一次之后输入的数本身都不会变,但是vector中的数也有可能会出现,eg.{3,2,1},最终2会出现是因为1的存在,关键就是要找到这些在vector中出现过但是却能通过别的数的变化从而最终出现的数。其实只需要,遍历一遍vector,检验它是否能最终出现即可。

     1         int count(vector <int> X)
     2         {
     3             set<int> no;
     4             int n = X.size();
     5             for(int i = 0; i < n; i++)
     6                 no.insert(X[i]);
     7             for(int i = 0; i < n; i++)
     8             {
     9                 int x = X[i];
    10                 for(int j = 0; j < n; j++)
    11                     if(x == X[j])
    12                         x *= 2;
    13                 if(no.find(x) != no.end())
    14                     no.erase(x);
    15             }
    16             return no.size(); 
    17         }
    View Code

    先暂时做这三个,其实这么久没有做过真的都忘的一干二净了,最明显的就是STL真的全忘了,每遇到一个新的container,都需要重新查它的用法

    1. vector

     1  vector<int> v;         //遍历v只需要将其当成数组就好
     2  int n = v.size();       // 返回元素个数
     3  bool e = v.empty();     //返回vector是否为空
     4  int f = v.front()       //返回第一个元素
     5  int b = v.front()       //返回最后一个元素
     6  
     7  v.push_back(x);
     8  v.pop_back();
     9  v.clear();
    10  v.erase(v.begin(), v.begin()+3)    //去掉前3个元素   

    2. set

    1 set<int> s;
    2 s.count(x)     //返回x的个数
    3 set<int>::iterator it;
    4 it = s.find(x)        //返回x的指针,如果不存在,返回s.end()
    5                            //*it == x        
     
  • 相关阅读:
    shellscript 02 find & xargs
    PL/SQL exception
    PL/SQL 游标
    Eclipse
    【数据存储】操作资源文件
    【AsynTask】Android异步加载一张图品
    【数据存储】利用IO流操作文件
    【数据存储】DOM操作
    【特效】手指滑动:水波纹
    【数据存储】SAX操作
  • 原文地址:https://www.cnblogs.com/kathyrine/p/3654865.html
Copyright © 2020-2023  润新知