답안 #126941

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
126941 2019-07-08T16:27:10 Z mohammedehab2002 Naan (JOI19_naan) C++11
24 / 100
4 ms 508 KB
#include <iostream>
#include <algorithm>
using namespace std;
struct frac
{
	long long first,second;
	frac()
	{
		
	}
	frac(long long f,long long s)
	{
		first=f;
		second=s;
	}
	bool operator<(const frac &f) const
	{
		return (first*f.second<second*f.first);
	}
	bool operator<=(const frac &f) const
	{
		return (first*f.second<=second*f.first);
	}
};
int gcd(int a,int b)
{
	if (!a || !b)
	return (a^b);
	return __gcd(a,b);
}
frac norm(frac a)
{
	int g=gcd(a.first,a.second);
	a.first/=g;
	a.second/=g;
	return a;
}
frac operator+(frac a,frac b)
{
	return norm(frac(a.first*b.second+b.first*a.second,a.second*b.second));
}
frac operator-(frac a,frac b)
{
	b.first*=-1;
	return a+b;
}
frac operator*(frac a,frac b)
{
	return norm(frac(a.first*b.first,a.second*b.second));
}
frac operator/(frac a,frac b)
{
	swap(b.first,b.second);
	return a*b;
}
int floor(frac a)
{
	return a.first/a.second;
}
int ceil(frac a)
{
	return (a.first+a.second-1)/a.second;
}
frac sp[2005];
int mat[2005][2005],p[2005];
long long sum[2005];
bool ok[2005][2005];
int main()
{
	int n,l;
	scanf("%d%d",&n,&l);
	for (int i=0;i<n;i++)
	{
		for (int j=1;j<=l;j++)
		{
			scanf("%d",&mat[i][j]);
			sum[j]+=mat[i][j];
		}
	}
	for (int i=1;i<=l;i++)
	sum[i]+=sum[i-1];
	sp[0]=frac(0,1);
	for (int i=1;i<n;i++)
	{
		for (int j=1;j<=l;j++)
		{
			if (frac(i,n)<frac(sum[j],sum[l]))
			{
				sp[i]=(frac(i*sum[l],n)-frac(sum[j-1],1))*frac(1,sum[j]-sum[j-1])+frac(j-1,1);
				break;
			}
		}
		printf("%d %d\n",sp[i].first,sp[i].second);
	}
	sp[n]=frac(l,1);
	for (int i=0;i<n;i++)
	{
		p[i]=i;
		frac tot(0,1);
		for (int j=1;j<=l;j++)
		tot=tot+frac(mat[i][j],1);
		for (int j=0;j<n;j++)
		{
			int l=ceil(sp[j]),r=floor(sp[j+1]);
			frac hap(0,1);
			if (l<=r)
			{
				hap=hap+(frac(l,1)-sp[j])*frac(mat[i][l],1);
				hap=hap+(sp[j+1]-frac(r,1))*frac(mat[i][r+1],1);
				for (int k=l+1;k<=r;k++)
				hap=hap+frac(mat[i][k],1);
			}
			else
			hap=frac(mat[i][l],1)*(sp[j+1]-sp[j]);
			if (frac(1,n)<=hap/tot)
			ok[i][j]=1;
		}
	}
	do
	{
		bool in=1;
		for (int i=0;i<n;i++)
		in&=ok[p[i]][i];
		if (in)
		{
			for (int i=0;i<n;i++)
			printf("%d ",p[i]+1);
			break;
		}
	} while (next_permutation(p,p+n));
}

Compilation message

naan.cpp: In function 'int main()':
naan.cpp:93:44: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
   printf("%d %d\n",sp[i].first,sp[i].second);
                    ~~~~~~~~~~~             ^
naan.cpp:93:44: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long long int' [-Wformat=]
naan.cpp:71:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&l);
  ~~~~~^~~~~~~~~~~~~~
naan.cpp:76:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d",&mat[i][j]);
    ~~~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Incorrect 3 ms 380 KB Unexpected end of file - int32 expected
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 428 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 3 ms 376 KB Output is correct
4 Correct 4 ms 504 KB Output is correct
5 Correct 4 ms 376 KB Output is correct
6 Correct 3 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 3 ms 376 KB Output is correct
9 Correct 4 ms 376 KB Output is correct
10 Correct 4 ms 508 KB Output is correct
11 Correct 3 ms 376 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 3 ms 376 KB Output is correct
14 Correct 4 ms 504 KB Output is correct
15 Correct 4 ms 376 KB Output is correct
16 Correct 4 ms 504 KB Output is correct
17 Correct 4 ms 504 KB Output is correct
18 Correct 4 ms 504 KB Output is correct
19 Correct 4 ms 380 KB Output is correct
20 Correct 4 ms 376 KB Output is correct
21 Correct 4 ms 504 KB Output is correct
22 Correct 4 ms 376 KB Output is correct
23 Correct 2 ms 376 KB Output is correct
24 Correct 4 ms 376 KB Output is correct
25 Correct 3 ms 376 KB Output is correct
26 Correct 3 ms 376 KB Output is correct
27 Correct 3 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Incorrect 3 ms 380 KB Unexpected end of file - int32 expected
3 Halted 0 ms 0 KB -