版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lingzidong/article/details/81990501
被jls教育自闭场……
补题进度[3/11] 场上1题
1001 Rikka with Nash Equilibrium
学习了一下dp的方法,按照从大到小的放法,设状态dp[i][j][k]代表放到了第i大的数,然后现在有j行k列已经放了。
假设放到没有交叉的地方,就是相对应的转移,会产生一个可以放的位置,要是放到交叉的地方,就不会产生交叉,答案只能是交叉的数目。、
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define next fuck
ll dp[2][100][100];
int main()
{
int ca;
scanf("%d",&ca);
while(ca--)
{
int n,m,mod;
int now = 0,next;
scanf("%d%d%d",&n,&m,&mod);
memset(dp,0LL,sizeof(dp));
dp[0][1][1] = 1LL*n*m;
for(int i = 2;i<=n*m;i++)
{
int next = now^1;
memset(dp[next],0LL,sizeof(dp[next]));
for(int j = 0;j<=n;j++)
{
for(int k = 0;k<=m;k++)
{
if(dp[now][j][k])
{
ll tmp = dp[now][j][k];
dp[next][j][k] = (dp[next][j][k] + 1LL*tmp*(j*k - i +1)) % mod;
dp[next][j+1][k] = (dp[next][j+1][k] + tmp*1LL*k*(n - j)) % mod;
dp[next][j][k+1] = (dp[next][j][k+1] + tmp*1LL*j*(m - k)) % mod;
}
}
}
now = next;
}
printf("%I64d\n",dp[now][n][m] % mod);
}
}
1004 Rikka with Stone-Paper-Scissors
很伤心的一道题,没有推出来随机的结论。如果是随机的话,只要分别考虑,算出贡献就行。
#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
int main()
{
ios::sync_with_stdio(0);
int ca ;
cin>>ca;
while(ca--)
{
ll a,b,c;
ll aa,bb,cc;
cin>>a>>b>>c;
cin>>aa>>bb>>cc;
ll num = a*bb - bb*c + b * cc - a * cc + aa*c - aa*b;
ll den = a+b+c;
if(num % den == 0)
{
cout<<num/den<<endl;
}
else
{
// cout<<num<<endl;
if( num < 0 )
{
cout << num/__gcd(-num,den) << "/" << den/__gcd(-num,den) << endl;
} else
{
cout << num/__gcd(num,den) << "/" << den/__gcd(num,den) << endl;
}
}
}
return 0;
}
1011 Rikka with Badminton
就是推式子,算一下就好了……