Hatena::Grouptopcoder

yakk512の日記

2014-08-16SRM#625Div2

練習,練習.

Easy

 概要

ある数字yが与えられる

この数字に対して

(a×b)+c = y

となるようなa,b,cを求めよ.

ただし,a,b,cのそれぞれについて0と1であってはならない.

a,b,cは-1000から1000の間の数字とする

 解法

  aとbに関して-1000から1000の間で全ての組み合わせを試す.

  c = y - (a*b)なので

  cが-1000から1000までの間にあるとa,b,cは組み合わせとして成り立つ.

class AddMultiply {
   public:
   vector <int> makeExpression(int y)
  {
    vector<int> v(3);
    for(int i = -1000; i <= 1000; i++)
      {
	if(i == 0 || i == 1)
	  {
	    continue;
	  }
	for(int j = -1000; j <= 1000; j++)
	  {
	    if(j == 0 || j == 1)
	      {
		continue;
	      }
	    int mul = i * j;
	    mul = y - mul;
	    if( -1000 <= mul && mul <= 1000 && mul != 0 && mul != -1)
	      {
		v[0] = i; v[1] = j; v[2] = mul;
		return v;
	      }
	  }
      }
    return v;
  }
};

2014-07-21

SRM#620Div2

22:43

練習練習

Easy

 概要

  M個のパラメータを持ったN人がいる.

m番目のパラメータでソートしてN人を順序づける.

 解法的な

  指定されたパラメータでソートする

  ソートする前のインデックスを返す必要があるので,pairを使う.

 コード

class CandidatesSelectionEasy {
public:
 
vector <int> sort(vector <string> score, int x)
{
 
vector< pair<string,int> > SortedScores(score.size());
 
for(int i = 0; i < score.size(); i++)
{
SortedScores[i].first = score[i].substr(x , 1);
SortedScores[i].second = i;
}
 
vector<int> ans(score.size());
 
std::sort( SortedScores.begin() , SortedScores.end() );
 
for(int i = 0; i < ans.size(); i++)
{
ans[i] = SortedScores[i].second;
}
 
return ans;
 
}
};

SRM#621Div2

21:11

Easy

 概要

  単語の列が与えられる.

  その単語の列が文字の数を基準にソートされているのか,辞書順にソートされているのかを答える.

 解法的な

  与えられた列をコピーして,ソート.このソート済みの列と比較して辞書順かどうかチェック

  列の初めから文字数をチェックしていく

 コード

class TwoWaysSorting {
   public:
   string sortingMethod(vector <string> stringList)
  {

    bool LexFlg = true;
    bool LenFlg = true;

    vector <string> SortedLexStList(stringList.size());
    for(int i = 0; i < stringList.size(); i++)
      {
	SortedLexStList[i] = stringList[i];
      }

    sort( SortedLexStList.begin() , SortedLexStList.end() );

    for(int i = 0; i < stringList.size(); i++)
      {
	if(stringList[i] != SortedLexStList[i])
	  {
	    LexFlg = false;
	  }
      }

    for(int i = 1; i < stringList.size(); i++)
      {
	if(stringList[i-1].size() > stringList[i].size())
	  {
	    LenFlg = false;
	  }
      }

    if(LexFlg && LenFlg) 
      {
	return "both";
      }
    else if(LexFlg)
      {
	return "lexicographically";
      }
    else if(LenFlg)
      {
	return "lengths";
      }
    else
      {
	return "none";
      }

  }
 };

2014-02-22

チーター本で練習ーみんなが楽しいパーティ

01:31

共通の話題を何人が持っているかを数える.

class InterestingParty 
{

public:
  int count( string topic , vector <string> first , vector <string> second )
  {
    int res = 0;
    for(int i = 0; i < first.size(); i++)
      {
	if( topic == first[i] || topic == second[i] )
	  {
	    res++;
	  }
      }
    return res;
  }

public:
  int bestInvitation(vector <string> first, vector <string> second) 
  {

    int result = 0;

    for(int i = 0; i < first.size(); i++)
      {
	result = max(result , max(count( first[i] , first , second ) , count( second[i] , first ,second ) ) );
      }
    return result;
  }

};

2014-02-16

Atcoder Regular Contest017の記録

12:37

コンテスト中に解けたのはA問題とB問題

A問題

#include<iostream>
#include<vector>
#include<cstdio>
#include<string>
#include<algorithm>
#include<numeric>
#include<map>
#include<math.h>

using namespace::std;

int main(void)
{

  int N;

  cin >> N;

  for(int i = 2; i < N; i++)
    {
      if( N % i == 0 )
	{
	  cout << "NO" << endl;
	  return 0;
	}
    }

  cout << "YES" << endl;
  

  return 0;
}

B問題


#include<iostream>
#include<vector>
#include<cstdio>
#include<string>
#include<algorithm>
#include<numeric>
#include<map>
#include<math.h>

using namespace::std;

int main(void)
{

  int N,K;
  int a = 0 , a_i_1 = -1;
  int len = 0;
  cin >> N >> K;
  int ans = 0;
  for(int i = 0; i < N; i++)
    {
      cin >> a;

      if( a > a_i_1 )
	{
	  len++;
	}
      else
	{
	  if(len >= K)
	    {
	      ans += len - K + 1;
	    }
	  len = 1;
	}
      a_i_1 = a;
    }

  if(len >= K)
    {
      ans += len - K + 1;
    }
  cout << ans << endl;

  return 0;
}