QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#550595#9255. Python Programucup-team987#AC ✓6ms6932kbC++202.0kb2024-09-07 13:33:132024-09-07 13:33:13

Judging History

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

  • [2024-09-07 13:33:13]
  • 评测
  • 测评结果:AC
  • 用时:6ms
  • 内存:6932kb
  • [2024-09-07 13:33:13]
  • 提交

answer

#include<iostream>
#include<algorithm>
#include<vector>
#include<cassert>
using namespace std;
pair<int,bool>rd(string X,int&id)
{
	if(X[id]>='a'&&X[id]<='z')
	{
		id--;
		assert(X[id]==','||X[id]=='(');
		return make_pair(0,true);
	}
	int v=0,p=1;
	while(X[id]>='0'&&X[id]<='9')
	{
		v+=p*(X[id]-'0');
		p*=10;
		id--;
	}
	if(X[id]=='-')v=-v,id--;
	assert(X[id]==','||X[id]=='(');
	return make_pair(v,false);
}
vector<pair<int,bool> >f(string X)
{
	vector<pair<int,bool> >ret;
	int id=X.size()-1;
	assert(X[id]==':');
	id--;
	assert(X[id]==')');
	id--;
	ret.push_back(rd(X,id));
	id--;
	ret.push_back(rd(X,id));
	if(X[id]==',')
	{
		id--;
		ret.push_back(rd(X,id));
		reverse(ret.begin(),ret.end());
	}
	else
	{
		reverse(ret.begin(),ret.end());
		ret.push_back(make_pair(1,false));
	}
	return ret;
}
vector<int>vals(int a,int b,int c)
{
	assert(c!=0);
	vector<int>ret;
	if(c>0)
	{
		//a,...,a+k*c<b
		if(a<b)
		{
			int k=(b-a-1)/c;
			ret.reserve(k+1);
			for(int i=0;i<=k;i++)ret.push_back(a+i*c);
		}
	}
	else
	{
		//a,...,a+k*c>b
		if(a>b)
		{
			int k=(a-b-1)/(-c);
			ret.reserve(k+1);
			for(int i=0;i<=k;i++)ret.push_back(a+i*c);
		}
	}
	return ret;
}
long long sum(int a,int b,int c)
{
	assert(c!=0);
	if(c>0)
	{
		//a,...,a+k*c<b
		if(a<b)
		{
			int k=(b-a-1)/c;
			return (long long)a*(k+1)+(long long)k*(k+1)/2*c;
		}
		else return 0LL;
	}
	else
	{
		//a,...,a+k*c>b
		if(a>b)
		{
			int k=(a-b-1)/(-c);
			return (long long)a*(k+1)+(long long)k*(k+1)/2*c;
		}
		else return 0LL;
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	string X,Y;
	getline(cin,X);
	getline(cin,X);
	getline(cin,Y);
	vector<pair<int,bool> >x=f(X),y=f(Y);
	for(auto[v,fg]:x)assert(!fg);
	long long ans=0;
	for(int i:vals(x[0].first,x[1].first,x[2].first))
	{
		int d,e,f;
		if(y[0].second)d=i;
		else d=y[0].first;
		if(y[1].second)e=i;
		else e=y[1].first;
		if(y[2].second)f=i;
		else f=y[2].first;
		ans+=sum(d,e,f);
	}
	cout<<ans<<"\n";
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3596kb

input:

ans=0
for a in range(1,3):
    for b in range(5,1,-2):
        ans+=b
print(ans)

output:

16

result:

ok single line: '16'

Test #2:

score: 0
Accepted
time: 0ms
memory: 3604kb

input:

ans=0
for q in range(100,50,-1):
    for i in range(q,77,20):
        ans+=i
print(ans)

output:

2092

result:

ok single line: '2092'

Test #3:

score: 0
Accepted
time: 3ms
memory: 6932kb

input:

ans=0
for i in range(1,1000000):
    for j in range(i,1,-1):
        ans+=j
print(ans)

output:

166666666665500001

result:

ok single line: '166666666665500001'

Test #4:

score: 0
Accepted
time: 1ms
memory: 3744kb

input:

ans=0
for i in range(31,321983,2):
    for j in range(313,382193):
        ans+=j
print(ans)

output:

11756963404587200

result:

ok single line: '11756963404587200'

Test #5:

score: 0
Accepted
time: 6ms
memory: 6908kb

input:

ans=0
for i in range(1,1000000):
    for j in range(i,114514,-1):
        ans+=j
print(ans)

output:

160610445975856765

result:

ok single line: '160610445975856765'

Extra Test:

score: 0
Extra Test Passed