QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#374768#3716. Simple Arithmeticucup-team1251WA 689ms9588kbC++172.3kb2024-04-02 17:57:422024-04-02 17:57:43

Judging History

你现在查看的是最新测评结果

  • [2024-04-02 17:57:43]
  • 评测
  • 测评结果:WA
  • 用时:689ms
  • 内存:9588kb
  • [2024-04-02 17:57:42]
  • 提交

answer

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<math.h>
#include<set>
#include<unordered_map>
#include<deque>
//#define int long long
//__builtin_popcount();
//next_permutation(start,end)和prev_permutation(start,end)
using namespace std;
typedef pair<int, int>PII;
const int N = 5e5 + 10, M = 5e2 + 10;
int n,m;
int a[N],b[N],c[N],d;
string s;
void init(int a[],string ss)
{
	a[0]=ss.length();
	for(int i=1;i<=a[0];i++)a[i]=ss[a[0]-i]-'0';
}
void print(int a[])
{
	if(a[0]==0)
	{
		cout<<0<<endl;
		return;
	}
	for(int i=a[0];i>0;i--)cout<<a[i];
	cout<<endl;
	return;
}
void printy(int a[])
{
	int tt=1;
	for(int i=1;i<=a[0];i++)
	{
		a[i]+=tt;
		tt=a[i]/10;
		a[i]%=10;
	}
	if(tt!=0)cout<<tt;
	for(int i=a[0];i>0;i--)cout<<a[i];
	cout<<endl;
	return;
}
int compare(int a[],int b[])
{
	if(a[0]>b[0])return 1;
	if(a[0]<b[0])return -1;
	for(int i    =a[0];i>0;i--)
	{
		if(a[i]>b[i])return 1;
		else if(a[i]<b[i])return -1;
	}
	return 0;
}
void jian(int a[],int b[])
{
	int flag;
	flag=compare(a,b);
	if(flag==0)
	{
		a[0]=0;
		return;
	}
	if(flag==1)
	{
		for(int i=1;i<=a[0];i++)
		{
			if(a[i]<b[i])
			{
				a[i+1]--;
				a[i]+=10;
			}
			a[i]-=b[i];
		}
		while(a[0]>0&&a[a[0]]==0)a[0]--;
		return;
	}
}
void numcpy(int p[],int q[],int det)
{
	for(int i=1;i<=p[0];i++)
	{
		q[i+det-1]=p[i];
		q[0]=p[0]+det-1;
	}
}
void chugao(int a[],int b[],int c[])
{
	int tmp[N];
	c[0]=a[0]-b[0]+1;
	for(int i=c[0];i>0;i--)
	{
		memset(tmp,0,sizeof(tmp));
		numcpy(b,tmp,i);
		while(compare(a,tmp)>=0)
		{
			c[i]++;
			jian(a,tmp);
		}
	}
	while(c[0]>0&&c[c[0]]==0)c[0]--;//长度
	return;
}
void df()
{
	while(cin>>s)
	{
		for(int i=0;i<=500;i++)a[i]=b[i]=c[i]=0;
		int l1=s.size();
		int flag=0;
		if(s[0]=='-')flag++;
		if(s[0]=='-')s=s.substr(1,l1-1);
		int yy=0;
		if(s[0]=='0')yy=1;
		init(a,s);
		cin>>s;
		int l2=s.size();
		if(yy==1)
		{
			cout<<"0"<<endl;
			continue;
		}
		if(s[0]=='-')
		{
			s=s.substr(1,l2-1);
			flag++;
		}
		init(b,s);
		chugao(a,b,c);
//		cout<<flag<<endl;
		if(a[0]==0)//当前是能整除的 
		{
			if(flag==1)cout<<"-";
			print(c);
		}
		else
		{
			if(flag==0||flag==2)print(c);
			else if(flag==1){//现在应该加上1; 
				cout<<"-";
				printy(c);
			}
		}
	}
}  
int main() {
		df();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 689ms
memory: 9588kb

input:

3 2
3 -2
-9223372036854775808 1
-9223372036854775808 -1
9223372036854775807 1
9223372036854775807 -1
-9223372036854775808 2
-9223372036854775808 -2
9223372036854775807 2
9223372036854775807 -2
-2076046199237518199 8895005889588087898
-3939164353449408 -1673591601308294572
236330652387008908 24746725...

output:

1
-2
-9223372036854775808
9223372036854775808
9223372036854775807
-9223372036854775807
-4611686018427387904
4611686018427387904
4611686018427387903
-4611686018427387904
-1

0
-1
-1
2
-2
-1
0
-2
1
0
0
-2
1
0
-37
0
0
3
-1
8
-1
8
-1
-1
-2
0
0
2
8
-1
0
-1
-2
-1
-5
-7
-1
-2
-3
-1
1
0
-11
-1
2
-1
11
8
0
0...

result:

wrong answer 13th words differ - expected: '0', found: '-1'