出题:4题
排名:252
I.Inverse Pair
WXL
签到题
const int N = 2e5+5;
int a[N];
bool vis[N],has[N];
map<int,int>pos;
int n,b[N],cnt;
void merge_sort(int a[],int l,int r)
{
if (r-l<1)
return ;
int mid=(l+r)>>1;
merge_sort(a,l,mid);
merge_sort(a,mid+1,r);
int i=l,j=mid+1;
fir(k,l,r)
if (j>r || i<=mid && a[i]<=a[j])
b[k]=a[i++];
else
cnt+=mid-i+1,b[k]=a[j++];//统筹不满足的情况
fir(k,l,r)
a[k]=b[k];
}
signed main()
{
IOS;
cin >> n;
rep(i,1,n)
{
cin >> a[i];
pos[a[i]] = i;
}
per(i,n,1)
{
vis[a[i]] = 1;
if(vis[a[i] - 1] && !has[a[i] - 1])
{
++a[pos[a[i] - 1]];
has[a[i] - 1] = 1;
has[a[i]] = 1;
}
}
// rep(i,1,n) cout << a[i] << ' ';
merge_sort(a,1,n);
cout << cnt;
}
J. Average
CY
#include <bits/stdc++.h>
typedef long long ll;
const int MAXN = 1e5 + 10;
const double eps = 1e-8;
int a[MAXN], b[MAXN];
ll sa[MAXN], sb[MAXN];
int dcmp(double x)
{
if (std::fabs(x) < eps) return 0;
if (x < 0) return -1;
return 1;
}
bool check(ll *s, int n, int constraint, double v)
{
double mini = 1e18;
for (int i = constraint; i <= n; ++i)
{
mini = std::min(mini, s[i - constraint] - v * (i - constraint));
double u = s[i] - v * i;
if (dcmp(mini - u) <= 0) return true;
}
return false;
}
double solve(ll *s, int n, int constraint)
{
double l = 0, r = 1e5;
while (r - l > eps)
{
double mid = (l + r) / 2;
if (check(s, n, constraint, mid)) l = mid;
else r = mid;
}
return l;
}
int main()
{
int n, m, x, y; scanf("%d%d%d%d", &n, &m, &x, &y);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for (int i = 1; i <= m; ++i)
scanf("%d", &b[i]);
for (int i = 1; i <= n; ++i)
sa[i] = sa[i - 1] + a[i];
for (int i = 1; i <= m; ++i)
sb[i] = sb[i - 1] + b[i];
double ans = solve(sa, n, x) + solve(sb, m, y);
printf("%.10lf\n", ans);
return 0;
}
F.Just a joke
WYX
博弈游戏,给一个无环图,每次可以删除一条边或者一个连通分量。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e4+10;
int ru[maxn];
pair<int,int>a[maxn];
int par[maxn];
int find(int x)
{
if(x==par[x]) return x;
return par[x]=find(par[x]);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)
par[i]=i;
for(int i=1;i<=m;i++)
{
int x,y;cin>>x>>y;
ru[x]++;ru[y]++;
par[find(x)]=find(y);
a[i]={x,y};
}
int ans=0;
for(int i=1;i<=n;i++)
if(find(i)==i) ans++;
// for(int i=1;i<=m;i++)
// {
// int x=a[i].first,y=a[i].second;
// if(ru[x]==1&&ru[y]==1) ans++;
// }
if((n+m)&1) cout<<"Alice\n";
else cout<<"Bob\n";
return 0;
}
C.LCS
WYX
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e3+10;
int a1,b1,c1,n;
int dp[maxn][maxn];
int lcs(string a,string b,int n,int m)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
return dp[n][m];
}
int f1(string s,string s1)
{
return lcs(s,s1,n,n);
}
bool f(string s1,string s2,string s3)
{
if(f1(s1,s2)==a1&&f1(s2,s3)==b1&&f1(s3,s1)==c1) return true;
return false;
}
int cc[5];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int a,b,c;
cin>>a>>b>>c>>n;
a1=cc[1]=a;b1=cc[2]=b;c1=cc[3]=c;
sort(cc+1,cc+4);
a=cc[3];b=cc[2];c=cc[1];
//cout<<a<<" "<<b<<" "<<c<<endl;
string s1,s2,s3;
for(int i=1;i<=a;i++)
s1+='a',s2+='a';
for(int i=a+1;i<=n;i++)
s1+='b',s2+='c';
for(int i=1;i<=c;i++)
s3+='a';
for(int i=1;i<=b-c;i++)
s3+='c';
//cout<<s1<<" "<<s2<<" "<<s3<<endl;
while(s3.size()<n) s3+='d';
if(f(s1,s2,s3)) cout<<s1<<endl<<s2<<endl<<s3<<endl;
else if(f(s1,s3,s2)) cout<<s1<<endl<<s3<<endl<<s2<<endl;
else if(f(s2,s1,s3)) cout<<s2<<endl<<s1<<endl<<s3<<endl;
else if(f(s2,s3,s1)) cout<<s2<<endl<<s3<<endl<<s1<<endl;
else if(f(s3,s1,s2)) cout<<s3<<endl<<s1<<endl<<s2<<endl;
else if(f(s3,s2,s1)) cout<<s3<<endl<<s2<<endl<<s1<<endl;
else cout<<"NO\n";
return 0;
}
B.Sample Game
每个数都有一个生成的期望,只要生成的值是最大的就可以一直生成,问生成的个数
x
2
x^2
x2的期望值是多少。
优质题解
期望dp或者直接推式子
上述链接中有两种做法
#include <bits/stdc++.h>
#include <iostream>
#include <ctime>
#include <cstdio>
#include <cctype>
#define inf 0x3f3f3f3f
#define IOS \
ios_base::sync_with_stdio(0); \
cin.tie(0);
#define rep(i, a, n) for (int i = a; i <= n; ++i)
#define per(i, a, n) for (int i = n; i >= a; --i)
//#define ONLINE_JUDGE
using namespace std;
typedef long long ll;
const int mod = 998244353;
namespace FastIO
{
char buf[1 << 21], buf2[1 << 21], a[20], *p1 = buf, *p2 = buf, hh = '\n';
int p, p3 = -1;
void read() {}
void print() {}
inline int getc()
{
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
inline void flush()
{
fwrite(buf2, 1, p3 + 1, stdout), p3 = -1;
}
template <typename T, typename... T2>
inline void read(T &x, T2 &...oth)
{
int f = 0;
x = 0;
char ch = getc();
while (!isdigit(ch))
{
if (ch == '-')
f = 1;
ch = getc();
}
while (isdigit(ch))
{
x = x * 10 + ch - 48;
ch = getc();
}
x = f ? -x : x;
read(oth...);
}
template <typename T, typename... T2>
inline void print(T x, T2... oth)
{
if (p3 > 1 << 20)
flush();
if (x < 0)
buf2[++p3] = 45, x = -x;
do
{
a[++p] = x % 10 + 48;
} while (x /= 10);
do
{
buf2[++p3] = a[p];
} while (--p);
print(oth...);
}
} // namespace FastIO
#define read FastIO::read
#define write FastIO::print
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int lcm(int a, int b) { return a / gcd(a, b) * b; };
ll ksm(ll a, ll n)
{
ll ans = 1;
while (n)
{
if (n & 1)
ans = (ans * a) % mod;
a = a * a % mod;
n >>= 1;
}
return ans % mod;
}
//==============================================================
const int maxn=105;
#define MOD(x) (((x)%mod+mod)%mod)
ll n,p[maxn];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
//clock_t c1 = clock();
//===========================================================
read(n);
int sum=0;
rep(i,1,n)read(p[i]),sum=(sum+p[i]);
for(int i=1;i<=n;++i){
p[i]=MOD(p[i]*ksm(sum,mod-2));
}
ll fval=1;
for(int i=1;i<=n;++i){
fval*=ksm(1-p[i],mod-2);
fval=MOD(fval);
}
ll gval=0;
for(int i=1;i<=n;++i){
gval+=1ll*p[i]*ksm(1-p[i],mod-2);
gval=MOD(gval);
}
ll f_val=gval*fval;
cout<<MOD(f_val*2%mod+fval)<<endl;
//===========================================================
FastIO::flush();
//std::cerr << "Time:" << clock() - c1 << "ms" << std::endl;
return 0;
}
总结:概率论薄弱