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;
}


posted @ 2025-04-23 20:38  涤生yang  阅读(20)  评论(0)    收藏  举报