我AC后继续玩我自己写的cmp,然后就(
P9942.in:
2
13960 29273
17161 31621
P9942.ans//暴力答案
1
P9942.out//提交程序答案
0
初步判断是我的AC程序为了特判不合法的情况将1置为了0再输出,然而这样会排掉本身只有一种方案的数据。
gen.cpp
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9;
int main()
{
freopen("P9942.in","w",stdout);
srand(time(0));
int n=rand()%8+1;
if(n==1)n++;
cout<<n<<endl;
for(int i=1;i<=n;i++)
{
int lim=rand()%mod+1;
cout<<lim;
if(i<n)cout<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++)
{
int cow=rand()%mod+1;
cout<<cow;
if(i<n)cout<<" ";
}
return 0;
}
AC.cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll lim[25];
ll cow[25];
int main()
{
int n=0;
ll res=1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>cow[i];
}
for(int i=1;i<=n;i++)
{
cin>>lim[i];
}
/*sort(cow+1,cow+n+1);
do
{
int flag=1;
for(int i=1;i<=n;i++)
{
if(cow[i]>lim[i])
{
flag=0;
break;
}
}
if(flag)res++;
}
while(next_permutation(cow+1,cow+n+1));*/
sort(lim+1,lim+n+1);
sort(cow+1,cow+n+1);
/*for(int i=1;i<=n;i++)
{
cout<<cow[i]<<' ';
}
cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<lim[i]<<' ';
}
cout<<endl;*/
for(int i=1;i<=n;i++)
{
ll cnt=0;
ll res1=n-(lower_bound(lim+1,lim+n+1,cow[i])-(lim+1));
ll res2=n-i;
cnt=res1-res2;
//cout<<res1<<' '<<res2<<' '<<cnt<<endl;
res*=cnt;
}
cout<<res;
return 0;
}
BF.cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll lim[25];
ll cow[25];
int main()
{
int n=0;
ll res=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>cow[i];
}
for(int i=1;i<=n;i++)
{
cin>>lim[i];
}
sort(cow+1,cow+n+1);
do
{
int flag=1;
for(int i=1;i<=n;i++)
{
if(cow[i]>lim[i])
{
flag=0;
break;
}
}
if(flag)res++;
}
while(next_permutation(cow+1,cow+n+1));
cout<<res;
return 0;
}
麻烦各位题目管理的大佬了,违规紫衫。
建议评橙,因为贪心思路略难于NOIP2023T1,但是不够难。