Particle

競技プログラミングについての雑記

SRM537 Div2

Easy
子音が6個で母音が2個で、母音が両方とも同じであれば"YES"でそうじゃなければ"NO"を出力する。
数えるだけ

class KingXNewBaby{
public:
	string isValid(string s) {
		int len = s.size();
		if(len!=8) return "NO";
		int a = 0;
		for(int i = 0; i < len; i++){
			char c = s[i],d;
			if(c=='a' ||c=='i' ||c=='o' ||c=='u' ||c=='e'){
				if(a){
					if(c!=d) return "NO";
				}
				a++;
				d = c;
			}
		}
		if(a == 2) return "YES";
		return "NO";
 	}
};

Medium
X*a+Y*b == A,B となるX,Yの個数を求める。
全探索です。範囲を間違えると落ちます。O(n^3)で解きましたが、if(X*i+Y*j==A)の部分を改良すればO(n^2)で解けます。

O(n^2)のコード(03/20 15:58編集)

class KingXNewCurrency{
	int a[200],b[200],r[201];
public:
	int howMany(int A, int B, int X) {
		if(!(A%X) && !(B%X)) return -1;
		memset(r,0,sizeof(r));
		if(A>B) swap(A,B);
		
		r[1]++;
		for(int Y = 2; Y <= B; Y++){
			bool af = 0,bf = 0;
			int t;
			for(int i = 0; (t = X*i) <= B; i++){
				if(A>=t && !((A-t) % Y)) af++;
				if(B>=t && !((B-t) % Y)) bf++;
			}
			if(af&&bf) r[Y]++;
		}
		
		int ans = 0;
		for(int i = 1; i <= B; i++) ans += r[i];
		return ans;
 	}
};

Hard
確率だけど、解けなかった。


239.14 + 0.00 + 0.00 = 239.14
Rating 1025 -> 1031