QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#595130#7747. MemoryAmiyaCastWA 0ms3864kbC++141.9kb2024-09-28 12:39:322024-09-28 12:39:34

Judging History

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

  • [2024-09-28 12:39:34]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3864kb
  • [2024-09-28 12:39:32]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define pii make_pair
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,b,a) for(int i=b;i>=a;--i)
const ll inf = 1145141919810;
using namespace std;
inline ll read() {
	ll x=0,f=1;
	char c=getchar();
	while (c<'0' || c>'9') {
		if (c=='-')  f=-1;
		c=getchar();
	}
	while (c>='0' && c<='9') {
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
inline void print(ll x) {
	if(x < 0) putchar('-'), x = -x;
	if(x > 9) print(x / 10);
	putchar(x % 10 + '0');
	return ;
}
inline void pprint(ll x) {
	print(x);
	puts("");
}
const int N = 2e5 + 7;
ll a[N], b[100], n;
ll qm(ll a, ll b) {
	ll base = 1;
	while(b) {
		if(b & 1) base *= a;
		a *= a;
		b >>= 1;
	}
	return base;
}
const int Block = 31;
void slv1() {
	vector<ll> f;
	f.resize(n + 1, 0ll);
	for(int i = 1; i <= n; ++i) {
		f[i] = f[i - 1] + a[i] * b[i - 1];
		if(f[i] > 0) {
			putchar('+');
		} else if(f[i] == 0) {
			putchar('0');
		} else if(f[i] < 0) {
			putchar('-');
		}
	}
}
void slv2() { //Block
	vector<ll> f;
	vector<int> g;
	f.resize(n + 1);
	g.resize(n + 1);
	for(int i = 1; i <= Block; ++i) {
		f[i] = f[i - 1] + a[i] * b[i - 1];
		if(f[i] > 0) {
			putchar('+');
		} else if(f[i] == 0) {
			putchar('0');
		} else if(f[i] < 0) {
			putchar('-');
		}
	}
	for(int i = Block + 1; i <= n; ++i){
		f[i] -= f[i - Block];
		f[i] /= 2;
		
		f[i] = f[i - 1] + a[i] * b[Block - 1];
		if(f[i] > 0){
			putchar('+');
		}else if(f[i] == 0){
			if(f[i - Block] > 0){
				putchar('+');
			}else if(f[i - Block] == 0){
				putchar('0');
			}else if(f[i - Block] < 0){
				putchar('-');
			}
		}else if(f[i] < 0){
			putchar('-');
		}
	}
}
int main() {
	n = read();
	rep(i, 1, n) a[i] = read();
	for(int i = 0; i <= Block; ++i) b[i] = qm(2, i);
	if(n <= Block) {
		slv1();
	} else {
		slv2();
	}
	return 0;
}

/*
 10
 2 -1 4 -7 4 -8 3 -6 4 -7
*/

详细

Test #1:

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

input:

10
2 -1 4 -7 4 -8 3 -6 4 -7

output:

+0+-+---+-

result:

ok single line: '+0+-+---+-'

Test #2:

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

input:

10
-1 36 18 18 18 18 18 18 18 -18

output:

-++++++++-

result:

ok single line: '-++++++++-'

Test #3:

score: -100
Wrong Answer
time: 0ms
memory: 3864kb

input:

1000
-1 193552 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 96776 967...

output:

-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...

result:

wrong answer 1st lines differ - expected: '-+++++++++++++++++++++++++++++...++++++++++++++++++++++++++++++-', found: '-+++++++++++++++++++++++++++++...+++++++++++++++++++++++++++++++'