답안 #448430

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
448430 2021-07-30T07:18:11 Z fuad27 Ice Hockey World Championship (CEOI15_bobek) C++14
20 / 100
1000 ms 204 KB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#include<bits/stdc++.h>
using namespace std;
class biginteger {
	public:
		string integer;
		biginteger(string s) {
			integer = s;
		}
		string get_int() {
			return integer;
		}
		string sum(string str1) {
			string str2 = integer;
			if (str1.length() > str2.length())
				swap(str1, str2);
			string str = "";
			int n1 = str1.length(), n2 = str2.length();
			reverse(str1.begin(), str1.end());
 		    reverse(str2.begin(), str2.end());
 
    		int carry = 0;
   			for (int i=0; i<n1; i++)
    			{
				int sum = ((str1[i]-'0')+(str2[i]-'0')+carry);
			        str.push_back(sum%10 + '0');
       				carry = sum/10;
			}
 
   			for(int i=n1; i<n2; i++)
    			{
        			int sum = ((str2[i]-'0')+carry);
        			str.push_back(sum%10 + '0');
       				carry = sum/10;
    			}
    			if (carry)
        			str.push_back(carry+'0');
    			reverse(str.begin(), str.end());
 
   			return str;
		}
		string multiply(string num2)
		{
			string num1 = integer;
			int len1 = num1.size();
			int len2 = num2.size();
			if (len1 == 0 || len2 == 0)
			return "0";
			vector<int> result(len1 + len2, 0);
			int i_n1 = 0;
			int i_n2 = 0;
			for (int i=len1-1; i>=0; i--)
			{
				int carry = 0;
				int n1 = num1[i] - '0';
				i_n2 = 0;
				for (int j=len2-1; j>=0; j--)
				{
					int n2 = num2[j] - '0';
					int sum = n1*n2 + result[i_n1 + i_n2] + carry;
					carry = sum/10;
					result[i_n1 + i_n2] = sum % 10;
		
					i_n2++;
				}
				if (carry > 0)
					result[i_n1 + i_n2] += carry;
				i_n1++;
			}
		
			int i = result.size() - 1;
			while (i>=0 && result[i] == 0)
			i--;
			if (i == -1)
			return "0";
			string s = "";
			
			while (i >= 0)
				s += std::to_string(result[i--]);
			return s;
		}
		string divide(int divisor)
		{
			string number = integer;
			string ans;
			int idx = 0;
			int temp = number[idx] - '0';
			while (temp < divisor)
				temp = temp * 10 + (number[++idx] - '0');
			while (number.size() > idx) {
				ans += (temp / divisor) + '0';
				temp = (temp % divisor) * 10 + number[++idx] - '0';
			}
			if (ans.length() == 0)
				return "0";
			return ans;
		}
		bool isSmaller(string str1, string str2)
		{
			int n1 = str1.length(), n2 = str2.length();
		
			if (n1 < n2)
				return true;
			if (n2 < n1)
				return false;
		
			for (int i = 0; i < n1; i++)
				if (str1[i] < str2[i])
					return true;
				else if (str1[i] > str2[i])
					return false;
		
			return false;
		}
 
		string difference(string str2)
		{
			string str1 = integer;
			if (isSmaller(str1, str2))
				swap(str1, str2);
			string str = "";
			int n1 = str1.length(), n2 = str2.length();
			reverse(str1.begin(), str1.end());
			reverse(str2.begin(), str2.end());
		
			int carry = 0;
			for (int i = 0; i < n2; i++) {
				int sub = ((str1[i] - '0') - (str2[i] - '0') - carry);
				if (sub < 0) {
					sub = sub + 10;
					carry = 1;
				}
				else
					carry = 0;
		
				str.push_back(sub + '0');
			}
		
			for (int i = n2; i < n1; i++) {
				int sub = ((str1[i] - '0') - carry);
				if (sub < 0) {
					sub = sub + 10;
					carry = 1;
				}
				else
					carry = 0;
		
				str.push_back(sub + '0');
			}
		
			reverse(str.begin(), str.end());
			string result = "";
			bool zero = false;
			for(char i:str) {
				if(!zero and i == '0')continue;
				else {
					zero = true;
					result.push_back(i);
				}
			}
			return result;
		}
		string getInteger() {
			return integer;
		}
};
int32_t main () {
	int n, c = 0;
	biginteger m("0");
	cin >> n >> m.integer;
	vector<biginteger> v(n, biginteger("0"));
	for(int i = 0;i<n;i++) {
		cin >> v[i].integer;
	}
	for (int b = 0; b < (1<<n); b++) {
		biginteger sum("0");
		for (int i = 0; i < n; i++) {
			if (b&(1<<i)) sum.integer=sum.sum(v[i].integer);
		}
		if(sum.integer == m.integer or sum.isSmaller(sum.integer, m.integer))c++;
	}
	cout<<c<<"\n"<<endl;	
}

Compilation message

bobek.cpp: In member function 'std::string biginteger::divide(long long int)':
bobek.cpp:92:25: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   92 |    while (number.size() > idx) {
      |           ~~~~~~~~~~~~~~^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 204 KB Output is correct
2 Correct 96 ms 204 KB Output is correct
3 Correct 226 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 38 ms 204 KB Output is correct
6 Execution timed out 1080 ms 204 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1091 ms 204 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -