QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#520221#8008. Fortune Wheelhanmm81WA 0ms3612kbC++141.8kb2024-08-15 11:46:532024-08-15 11:46:53

Judging History

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

  • [2024-08-15 11:46:53]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3612kb
  • [2024-08-15 11:46:53]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct fen{
	int up,down;
	fen(int p=0,int q=1){
		int t = __gcd(p,q);
		p /= t,q /= t;
		up = abs(p),down = abs(q);
		if (p * q < 0) up = -up;
	}
	double show(){
		return 1.0*up/down;
	}
	bool operator>(const fen & a){
		return (up*a.down > a.up*down);
	}
	bool operator<(const fen & a){
		return (up*a.down < a.up*down);
	}
	fen operator+(const fen & a){
		return fen(a.up*down+up*a.down,down*a.down);
	}
	fen operator+=(const fen & a){
		return *this = fen(a.up*down+up*a.down,down*a.down);
	}
	fen operator-(const fen & a){
		return fen(up*a.down-a.up*down,down*a.down);
	}
	fen operator-=(const fen & a){
		return *this = fen(up*a.down-a.up*down,down*a.down);
	}
	fen operator*(const fen & a){
		return fen(a.up*up,down*a.down);
	}
	fen operator*=(const fen & a){
		return *this = fen(a.up*up,down*a.down);
	}
	fen operator/(const fen & a){
		return fen(a.down*up,a.up*down);
	}
	fen operator/=(const fen & a){
		return *this=*this/a;
	}
	
}ans;
int dist[100005],n,x,k,a[505],cnt,pre[100005];
priority_queue<pii> p;
signed main(){
	cin >> n >> x >> k;
	for (int i = 1;i < n;i++) dist[i] = 0x3f3f3f3f;
	for (int i = 1;i <= k;i++) cin >> a[i];
	dist[0] = 0,p.push({0,0});
	while (!p.empty()){
		pii top = p.top();
		p.pop();
		for (int i = 1;i <= k;i++){
			if (dist[(top.se-a[i]+n)%n] > 1-top.fi) p.push(make_pair(-(dist[(top.se-a[i]+n)%n] = 1-top.fi),(top.se-a[i]+n)%n));
		}
	}
	sort(dist,dist+n),pre[0] = dist[0];
	ans.up = dist[x];
	for (int i = 0;i < n;i++){
		if (i > 0) pre[i] = pre[i-1] + dist[i];
		if (ans > fen(pre[i]+n,i+1)) ans = fen(pre[i]+n,i+1);
	}
	cout << ans.up << " " << ans.down;
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

6 3 2
2 4

output:

8 3

result:

ok 2 number(s): "8 3"

Test #2:

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

input:

5 4 1
1

output:

8 3

result:

wrong answer 1st numbers differ - expected: '1', found: '8'