【牛客训练记录】牛客周赛 Round 79
训练情况

赛后反思
参加了内测,赛时打不了,这个D题思路简单,实现太难了
A题
直接 \([x,2x]\) 区间内暴力判质数
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
bool pd(int x){
if(x == 1) return false;
for(int i = 2;i*i<=x;i++){
if(x % i == 0) return true;
}
return false;
}
void solve(){
int x; cin>>x;
for(int i = x;i<=2*x;i++){
if(pd(i)){
cout<<i<<endl;
return;
}
}
cout<<-1<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
B题
每次只能随机选择相邻的两个球,要操作最小,只能两个两个球中间空一格,注意一下除三剩下两个还可以再填,操作最大就两个两个紧挨着
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
cout<<x/3+((x%3==2)?1:0)<<" "<<x/2<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
C题
我们注意到有两种不同的简单路径,一种是差不多 ^ 这种形状的路径,还有一种 | 直着下来的四种不同的路径,所以 ^ 这种路径,就是深度 -1 的二叉树节点个数,即有 \(2^{x-1} - 1\) 种,| 直着下来的对于深度最深和次深的节点不存在,其余节点都存在,即 \(2^x - 1 - 2^{x-1} - 2^{x-2}\) 个节点,乘 \(4\) 就是路径数,注意一下负数取模的问题即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int mod = 1e9 + 7;
int qpow(int a,int b){
int x = a;
int y = b;
int ans = 1;
while(y){
if(y&1){
ans*=x;
ans%=mod;
}
x*=x;
x%=mod;
y>>=1;
}
return ans;
}
int jian(int a,int b){
return ((a%mod) - (b%mod) + mod) % mod;
}
void solve(){
int x; cin>>x;
if(x == 1){
cout<<0<<endl;
return;
}
int n = jian(qpow(2,x),1);
int a = qpow(2,x-1);
int b = jian(n,a);
b = jian(b,qpow(2,x-2));
int ans = 0;
ans += b*4;
ans%=mod;
ans += qpow(2,x-1) - 1;
ans%=mod;
while(ans<0) ans += mod;
cout<<ans<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
D题
我们发现对于区间 \([x,2x]\),对于大于两位的数,最高位一定会加上一个 \(1\),所以我们剩下位置都补零,然后去凑数位和为质数,注意下最高位是 \(9\) 的情况要变成 \(10\)。
代码实现略

浙公网安备 33010602011771号