PKU1002(2)

とまぁ適当に読んで分かった事実を用いてコードを書く。
まずはC++で優雅に書いて見よう。
ネタばれ注意の続きを読む
とりあえず、ある数とその数の数のカウントというのはmapで簡単に定義できる。
なので入力を数値に変換しながらmapに突っ込んでいけばおしまい。

#include
#include
#include
#include
#include
#include
#include
using namespace std;
mapm;
bool f(bool g,std::pair&p){
	if(p.second > 1)
		cout <<
			setfill('0') << setw(3) << p.first/10000 << '-' <<
			setfill('0') << setw(4) << p.first%10000 << ' ' <<
			p.second << endl ,
		g = false;
	return g;
}
int main(){
	string line;
	getline(cin,line);
	for(;getline(cin,line);){
		int d = 0;
		for(const char*p=line.c_str();char c = *p;++p)
			if(c!='-')
				if(isdigit(c)) d = d*10 + c-'0';
				else d = d*10 + (c-'A' -(c>'Q')) / 3 + 2;
		++m[d];
	}
	if(accumulate(m.begin(),m.end(),true,f))
		cout << "No duplicates." << endl;
}

結果 ... TLE ( ´゚д゚`)えーーー
というわけで次はこれを徹底的に無駄を省きましょう

続く