2024 5.12 轻工业大学郑州邀请赛
A题
构造
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"
const int N=1234567890;
void solve()
{
int n,d,ans;
cin>>n>>d;
ans=N+d;
ans=ans*pow(10,to_string(n).size());
int t=n-(ans%n);
cout<<(ans+t)/n<<'\n';
}
signed main()
{
IOS
int T=1;
cin>>T;
while(T--)
{
solve();
}
return 0;
}
H题
逆元
//1、答题模板
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"
int M=998244353;
int qpow(int x, int y) {
int ans = 1;
while (y) {
if (y & 1)ans = (ans * x) % M;
x = (x * x) % M;
y /= 2;
}
return ans;
}
void solve()
{
int n;cin>>n;
int t=2*n;
int xx;
map<int,int> mp;
multiset<int> b;
int fz=1,fm=1;
int ne=-1;
int num=0;
while(t--)
{
cin>>xx;
if(xx>=0)
{
num++;//总数
mp[xx]++;//最小值数量
b.insert(xx);//最小值是谁
}
else
{
if(*b.begin()<ne)
{
cout<<0<<endl;
return ;
}
fm*=num;
fm%=M;
num-=1;
fz*=mp[*b.begin()];//最小值个数
fz%=M;
mp[*b.begin()]--;
ne=*b.begin();
b.erase(b.begin());
}
}
// cout<<fz<<' '<<fm<<endl;
fm = qpow(fm, M - 2) % M;
int ans = (fz * fm) % M;
cout << ans << endl;
}
signed main()
{
IOS
int T=1;//cin>>T;
while(T--)
{
solve();
}
return 0;
}
M题
二分答案
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"
const int N=100003;
int a[300006];
int b[300006];
int n;
bool han(int k)
{
int ml=a[1]-k*b[1];
int mr=a[1]+k*b[1];
for(int i=2;i<=n;i++)
{
int ll=a[i]-k*b[i];
int rr=a[i]+k*b[i];
if(ll>ml) ml=ll;
if(rr<mr) mr=rr;
}
if(ml>mr) return false;
else
return true;
}
void solve()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
long long l=0,r=0x3f3f3f3f;
while(l<r)
{
int k=l+r>>1;
if(han(k))
{
r=k;
}
else
{
l=k+1;
}
}
cout<<l<<endl;
}
signed main()
{
IOS
int T=1;
cin>>T;
while(T--)
{
solve();
}
return 0;
}

浙公网安备 33010602011771号