牛客周赛Ronud 46
A 乐奈吃冰
思路:
我感觉这题才是最难的,可恶,wa了好几次,型号是OI赛制
模拟,假设有x份冰,y份热,我们能吃min(x/2,y)份热,但我们可以吃完所有点冰
Code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin()+1,x.end()
#define PII pair<int,int>
#define IOS std::ios::sync_with_stdio(0),cin.tie(0)
void solve(){
int a,b;
cin>>a>>b;
int x=min(a/2,b);
if(x==0){
cout<<a<<endl;
return ;
}
else{
cout<<x+a<<endl;
return ;
}
}
signed main(){
int t=1;
while(t--) solve();
return 0;
}
B 素世喝茶
思路:
根据题意模拟一下,我写的很复杂,肯定时候更简单的思路
Code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin()+1,x.end()
#define PII pair<int,int>
#define IOS std::ios::sync_with_stdio(0),cin.tie(0)
void solve(){
int n,x;
cin>>n>>x;
std::vector<int> a(n+1);
set<int> s;
int maxn=-1;
std::map<int, std::vector<int>> mp;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]].push_back(i);
maxn=max(maxn,a[i]);
// s.insert(a[i]);
}
int z=a[x];
// cout<<z<<endl;
sort(all(a));
if(maxn==z){
// cout<<1<<endl;
if(mp[z].size()>1){
// cout<<1<<endl;
cout<<mp[z].size()-1<<endl;
return ;
}
else{
for(int i=n;i>=1;i--){
if(a[i]!=maxn){
// cout<<a[i]<<" ";
cout<<mp[a[i]].size()<<endl;
return ;
}
}
}
}
else{
cout<<mp[a[n]].size()<<endl;
return ;
}
}
signed main(){
int t=1;
while(t--) solve();
return 0;
}
C 爱音开灯
思路:
我们找因子就可以了,但是需要注意n比x大和比x小的两种情况
Code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin()+1,x.end()
#define PII pair<int,int>
#define IOS std::ios::sync_with_stdio(0),cin.tie(0)
void solve(){
int n,x;
cin>>n>>x;
int ans=0;
for(int i=1;i<=sqrt(x);i++){
if(i>n){
break;
}
if(x%i==0){
ans++;
if(i!=(x/i)&&x/i<=n){
ans++;
}
}
}
if(ans%2){
cout<<"ON"<<endl;
return ;
}
else{
cout<<"OFF"<<endl;
return ;
}
}
signed main(){
int t=1;
while(t--) solve();
return 0;
}
D 小登做题
思路:
根据mex函数,我们可以自然而然地发现mex函数最后得到的只能是0,1,2这三个数的其中一个
Code
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin()+1,x.end()
#define PII pair<int,int>
#define IOS std::ios::sync_with_stdio(0),cin.tie(0)
void solve(){
int a,b,c,k;
cin>>a>>b>>c>>k;
if(k!=0&&k!=1&&k!=2&&k!=a&&k!=b&&k!=c){
cout<<-1<<endl;
return ;
}
if(k==a||k==b||k==c){
cout<<0<<endl;
return ;
}
bool ok1=false;
bool ok2=false;
bool ok0=false;
if(a==0||b==0||c==0){
ok0=true;
}
if(a==1||b==1||c==1){
ok1=true;
}
if(a==2||b==2||c==2){
ok2=true;
}
int ans=0;
if(!ok0){
ans++;
if(k==0){
cout<<ans<<endl;
return ;
}
}
if(!ok1){
ans++;
if(k==1){
cout<<ans<<endl;
return ;
}
}
if(!ok2){
ans++;
if(k==2){
cout<<ans<<endl;
return ;
}
}
cout<<ans<<endl;
return ;
}
signed main(){
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
E 立希喂猫
思路:
二分+前缀和
Code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin()+1,x.end()
#define PII pair<int,int>
#define IOS std::ios::sync_with_stdio(0),cin.tie(0)
const int N=1e5+10;
int a[N],b[N],idx[N];
int s[N];
int s1[N];
int n;
bool check(int x,int y){
if(b[idx[x]]>y){
return false;
}
else{
return true;
}
}
void solve(){
// int n;
cin>>n;
// std::vector<int> a(n+1),b(n+1),idx(n+1);
// std::vector<int> s(n+1);
for(int i=1;i<=n;i++){
cin>>a[i];
}
int maxn=-1;
for(int i=1;i<=n;i++){
cin>>b[i];
maxn=max(maxn,b[i]);
}
// int maxn=-1;
for(int i=1;i<=n;i++){
idx[i]=i;
}
sort(idx+1,idx+n+1,[&](int i,int j){
return b[i]<b[j];
});
for(int i=1;i<=n;i++){
s[i]=s[i-1]+b[idx[i]]*a[idx[i]];
s1[i]=s1[i-1]+a[idx[i]];
};
// for(int i=1;i<=n;i++){
// cout<<s[i]<<" "<<s1[i]<<endl;
// }
int q;
cin>>q;
while(q--){
int x;
cin>>x;
// int ans=0;
if(x>=maxn){
cout<<s[n]<<endl;
continue;
}
int l=0;
int r=n+1;
while(l<r){
int mid=(l+r+1)/2;
// cout<<mid<<endl;
if(check(mid,x)){
// cout<<1<<endl;
l=mid;
}
else{
// cout<<2<<endl;
r=mid-1;
}
}
// cout<<l<<
cout<<s[l]+(s1[n]-s1[l])*x<<endl;
// return ;
}
return ;
}
signed main(){
int t=1;
// cin>>t;
while(t--) solve();
return 0;
}
F 祥子拆团
思路:
质因数分解+Lucas定理+插板法(组合数)
一开始我的Lucas定理写超时了,不知道哪里出了一些问题(后续查看)
Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define M 1000000007
int i,j,k,n,m,t;
ll ksm(ll a,ll p){ll res=1;while(p){if(p&1){res=res*a%M;}a=a*a%M;p>>=1;}return res;}
ll c(ll n,ll m){
if(m==0)return 1;
ll r1=1,r2=1;
for(int i=1;i<=m;i++)r1=r1*(n+1-i)%M,r2=r2*i%M;
return r1*ksm(r2,M-2)%M;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin>>t;
while(t--){
cin>>n>>m; ll res=1;
for(i=2;i<=40000;i++){
k=0; while(!(n%i)){n/=i; k++;}
res=res*c(m+k-1,k)%M;
}
if(n>1)res=res*m%M;
cout<<res<<'\n';
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验