読者です 読者をやめる 読者になる 読者になる

るくすの日記 ~ Out_Of_Range ~

主にプログラミング関係

Div2Easy 10連戦

最近TopCoderの成績がひどいので、とりあえずDiv2Easyを確実にとれるようにしようと思ってプラクティスしました。
てことでDiv2Easy 10連戦のソース(プリプロセッサ部分とかもろもろは省略してます)

SRM416
map使って解いた

class MostCommonLetters {
public:
  string listMostCommon(vector <string> text) {
    string result="";
    string cc="";
    map<char,int>log;
    int mx=-10;
    for(int j=0;j<text.size();j++){
      for(int i=0;i<text[j].size();i++){
	if(text[j][i]!=' '){
	  log[text[j][i]]++;
	  mx=max(log[text[j][i]],mx);
	}
      }
    }
    for(map<char,int>::iterator it=log.begin();it!=log.end();it++){
      if((*it).second==mx) result+=(*it).first;
    }
    
    return result;
  }
};

SRM417
reverse()使えばもっと短く早く書けるけど知らずに実装してしまったorz

class ReversedSum {
public:
  void IntToString(char *str, int number)
  {
    sprintf(str, "%d", number);
  }
  string sx;
  string sy;
  int Rev(int i){
    string res;
    char sNum[30];
    IntToString(sNum,i); res=sNum;
    int max=res.size()%2==0?res.size()/2:res.size()/2+1;
    for(int j=0;j<max;j++){
      char t=res[j];
      res[j]=res[res.size()-1-j];
      res[res.size()-1-j]=t;
    }
    return atoi(res.c_str());
  }
  int getReversedSum(int x, int y) {
    int result;
    result=Rev(Rev(x)+Rev(y));
    return result;
  }

};

SRM476
全部実装してバグってふぇーい
青様のコードを拝見させていただいて、すごい単純に書ける事が判明

class MatrixShiftings {
public:
  int minimumShifts(vector <string> matrix, int value) {
    int result=10000000;
    for(int i=0;i<matrix.size();i++){
      for(int j=0;j<matrix[0].size();j++){
	if(matrix[i][j]-'0'==value){
	  int f,ff; f=ff=0;
	  f=matrix.size()-i<i?matrix.size()-i:i;
	  ff=matrix[0].size()-j<j?matrix[0].size()-j:j;
	  result=result<(f+ff)?result:f+ff;
	}
      }
    }
    if(result!=10000000) return result;
    return -1;
  }
};

SRM477
やるだけ(半分眠りながら書いた気がする)

class VacationTime {
public:
  bool Match(int t,vector<int>wd){
    for(int i=0;i<wd.size();i++){
      if(wd[i]==t) return true;
    }
    return false;
  }
  int bestSchedule(int N, int K, vector <int> workingDays) {
    int result=10000;
    sort(workingDays.begin(),workingDays.end());
    for(int i=1;i<=N;i++){
      int ch=0;
      if(i+K-1>N) break;
      for(int j=i;j<i+K;j++){
	if(Match(j,workingDays)) ch++;//
      }
      result=min(result,ch);
    }
    return result;
  }
};


SRM479
今までで一番高得点(236)だった気がする
いや普通もっと行くでしょ

class TheAirTripDivTwo {
public:
  int find(vector <int> flights, int fuel) {
    int result;
    int i;
    for(i=0;i<flights.size();i++){
      if(fuel<flights[i]) break;
      fuel-=flights[i];
    }
    result=i;
    return result;
  }

};

SRM480
long long 返す関数なのに int 返してて桁があふれて5分ぐらい無駄にした

class Cryptography {
public:
  long long times(int t,vector<int>n){
    n[t]++;
    long long res=1;
    for(int i=0;i<n.size();i++) res*=n[i];
    return res;
  }
  long long encrypt(vector <int> numbers) {
    long long result=-100000;
    for(int i=0;i<numbers.size();i++){
      result=max(times(i,numbers),result);
    }
    return result;
  }
};

SRM481
ヨセフス? とか思ったけど普通にやるだけ

class CircleMarket {
public:
  int makePurchases(vector <int> openTime, vector <int> closeTime, int travelTime) {
    int result=0;
    int tm=0;
    int mx=-100;
    vector<bool>already;
    for(int i=0;i<closeTime.size();i++) already.push_back(false);
    for(int i=0;i<closeTime.size();i++) mx=max(closeTime[i],mx);
    while(tm<=mx){
      for(int i=0;i<openTime.size();i++){
	if(openTime[i]<=tm && tm<=closeTime[i] && already[i]==false){
	  result++;
	  already[i]=true;
	}
	tm+=travelTime;
      }
    }
    return result;
  }

};

SRM483
穴!
書くのめんどくさい

class DigitHoles {
public:
  void IntToString(char *str, int number)
  {
    sprintf(str, "%d", number);
  }
  int numHoles(int number) {
    char c[1000];
    IntToString(c,number); string s=c;
    int hole=0;
    for(int i=0;i<s.size();i++){
      if(s[i]=='0' || s[i]=='4' || s[i]=='6' || s[i]=='9') hole++;
      else if(s[i]=='8') hole+=2;
    }
    return hole;
  }
};

SRM484
書くのめんどくさい(切実
黄様のコードみたらもっと少なく書いてて、法則性があったらしいけどもうこれでいいや

class NumberMagicEasy {
public:
  int theNumber(string answer) {
    int result;
    int number[17];
    for(int i=1;i<17;i++) number[i]=i;
    for(int i=0;i<answer.size();i++){
      if(answer[i]=='N'){
	if(i==0){
	  number[1]=0;
	  number[2]=0;
	  number[3]=0;
	  number[4]=0;
	  number[5]=0;
	  number[6]=0;
	  number[7]=0;
	  number[8]=0;
	}else if(i==1){
	  number[1]=0;
	  number[2]=0;
	  number[3]=0;
	  number[4]=0;
	  number[9]=0;
	  number[10]=0;
	  number[11]=0;
	  number[12]=0;
	}else if(i==2){
	  number[1]=0;
	  number[2]=0;
	  number[5]=0;
	  number[6]=0;
	  number[9]=0;
	  number[10]=0;
	  number[13]=0;
	  number[14]=0;
	}else if(i==3){
	  number[1]=0;
	  number[3]=0;
	  number[5]=0;
	  number[7]=0;
	  number[9]=0;
	  number[11]=0;
	  number[13]=0;
	  number[15]=0;
	}
      }
    }
    for(int i=1;i<17;i++){
      if(number[i]!=0) return number[i];
    }
    return -1;
  }

};

SRM487
バニーちゃん かわいいお
やるだけっぽい

class BunnyExamAfter {
public:
  int find(char t,string s){
    for(int i=0;i<s.size();i++){
      if(s[i]==t) return i;
    }
    return -1;
  }
  int getMaximum(string black, string gray, string white) {
    int result=0;
    for(int i=0;i<black.size();i++){
      if(black[i]==gray[i]) gray[i]='0';
      if(black[i]==white[i]) white[i]='0';
    }
    for(int i=0;i<gray.size();i++){
      if(gray[i]==white[i] && gray[i]!='0' && white[i]!='0') result+=2;
      if(gray[i]!=white[i]) result++;
    }
    //    cout<<gray<<endl<<white<<endl;
    return result;
  }
};

元旦は部屋にこもってずっとこれやってましたー(・ω<)☆テヘペロ