Submission #91686

#TimeUsernameProblemLanguageResultExecution timeMemory
91686SamAndOdd-even (IZhO11_oddeven)C++17
100 / 100
49 ms504 KiB
#pragma comment(linker,"/STACK:200000000")
#define _CRT_SECURE_NO_WARNINGS
#define mp make_pair
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <list>
#include <stack>
#include <string>
#include <cstring>
void fp();
void sp();
using namespace std;
struct ban
{
	vector<short> x;
};
bool operator<(const ban& a,const ban& b)
{
	if(a.x.size()<b.x.size())
		return true;
	if(a.x.size()>b.x.size())
		return false;
	for(int i=0;i<a.x.size();++i)
	{
		if(a.x[i]<b.x[i])
			return true;
		if(a.x[i]>b.x[i])
			return false;
	}
	return false;
}
bool operator==(const ban& a,const ban& b)
{
	if(a.x.size()!=b.x.size())
		return false;
	for(int i=0;i<a.x.size();++i)
		if(a.x[i]!=b.x[i])
			return false;
	return true;
}
bool operator>(const ban& a,const ban& b)
{
	if(!(a<b) && !(a==b))
		return true;
	return false;
}
ban operator+(const ban& q,const ban& p)
{
	ban a=q,b=p;
	reverse(a.x.begin(),a.x.end());
	reverse(b.x.begin(),b.x.end());
	while(a.x.size()!=b.x.size())
	{
		if(a.x.size()<b.x.size())
			a.x.push_back(0);
		else
			b.x.push_back(0);
	}
	int n=a.x.size();
	ban res;
	short x=0;
	for(int i=0;i<n;++i)
	{
		x+=a.x[i];
		x+=b.x[i];
		res.x.push_back(x%10);
		x/=10;
	}
	if(x)
		res.x.push_back(x);
	reverse(res.x.begin(),res.x.end());
	return res;
}
ban operator-(const ban& p,const ban& q)
{
	ban a=p,b=q;
	reverse(a.x.begin(),a.x.end());
	reverse(b.x.begin(),b.x.end());
	while(a.x.size()!=b.x.size())
	{
		if(a.x.size()<b.x.size())
			a.x.push_back(0);
		else
			b.x.push_back(0);
	}
	int n=a.x.size();
	ban res;
	for(int i=0;i<n;++i)
	{
		if(a.x[i]-b.x[i]>=0)
			res.x.push_back(a.x[i]-b.x[i]);
		else
		{
			a.x[i]+=10;
			a.x[i+1]--;
			res.x.push_back(a.x[i]-b.x[i]);
		}
	}
	while(1)
	{
		if(res.x.empty())
			break;
		if(res.x.back())
			break;
		res.x.pop_back();
	}
	reverse(res.x.begin(),res.x.end());
	return res;
}
ban operator*(const ban& a,const ban& b)
{
	ban res;
	int n=a.x.size();
	for(int i=0;i<n;++i)
	{
		ban y;
		for(int j=0;j<a.x[i];++j)
			y=y+b;
		for(int j=0;j<(n-i-1);++j)
			y.x.push_back(0);
		res=res+y;
	}
	return res;
}
ban operator/(const ban& a,const ban& b)
{
	ban res;
	short x=0;
	for(int i=0;i<a.x.size();++i)
	{
		x*=10;
		x+=a.x[i];
		if(x>=2)
		{
			res.x.push_back(x/2);
			x-=((x/2)*2);
		}
		else if(!res.x.empty())
			res.x.push_back(0);
	}
	return res;
}



void tpel(ban a)
{
	for(int i=0;i<a.x.size();++i)
		cout<<a.x[i];
	cout<<endl;
}



ban INF;
ban a1;
ban a2;
ban a4;
ban a;
void sol()
{
	ban l=a1;
	ban r=INF;
	while(a4<(r-l))
	{
		if(!(l==a1))
			cout<<"";
		ban m=(r+l)/a2;
		if((((m*m)+m)/a2)>a)
			r=m;
		else
			l=m;
	}
	ban ans;
	for(ban i=l;(i<r || i==r);i=i+a1)
	{
		ban m=i;
		if((((m*m)+m)/a2)>a)
		{
			m=m-a1;
			i=(((m*m)+m)/a2);
			if(a==i)
				ans=(m*m);
			else
				ans=(m*m)+(a-i-a1)*a2+a1;
			break;
		}
	}
	tpel(ans);
}
int main()
{
	ios_base::sync_with_stdio(false);
	//fp();
	///////////////////////////////////
	string s;
	int n;
	cin>>s;
	n=s.size();
	for(int i=0;i<n;++i)
		a.x.push_back(s[i]-'0');
	////////////////////////////
	a1.x.push_back(1);
	a2.x.push_back(2);
	a4.x.push_back(4);
	INF.x.push_back(1);
	for(int i=0;i<50;++i)
		INF.x.push_back(0);
	///////////////////////////////////
	sol();
	sp();
	return 0;
}

void fp()
{
#ifndef OLYMP
	freopen("E.in","r",stdin);
	freopen("E.out","w",stdout);
#endif
}
void sp()
{
#ifdef OLYMP
	system("pause");
#endif
}

Compilation message (stderr)

oddeven.cpp:1:0: warning: ignoring #pragma comment  [-Wunknown-pragmas]
 #pragma comment(linker,"/STACK:200000000")
 
oddeven.cpp: In function 'bool operator<(const ban&, const ban&)':
oddeven.cpp:28:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.x.size();++i)
              ~^~~~~~~~~~~
oddeven.cpp: In function 'bool operator==(const ban&, const ban&)':
oddeven.cpp:41:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.x.size();++i)
              ~^~~~~~~~~~~
oddeven.cpp: In function 'ban operator/(const ban&, const ban&)':
oddeven.cpp:134:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.x.size();++i)
              ~^~~~~~~~~~~
oddeven.cpp: In function 'void tpel(ban)':
oddeven.cpp:153:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.x.size();++i)
              ~^~~~~~~~~~~
oddeven.cpp: In function 'void fp()':
oddeven.cpp:223:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  freopen("E.in","r",stdin);
  ~~~~~~~^~~~~~~~~~~~~~~~~~
oddeven.cpp:224:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  freopen("E.out","w",stdout);
  ~~~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...