A、夹娃娃
思路:前缀和,卡cin和cout。
#include<bits/stdc++.h>
#define js ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
int n,k,l,r;
ll a[100005];
int main() {
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i) scanf("%lld",&a[i]),a[i]+=a[i-1];
while(k--) {
scanf("%d%d",&l,&r);
printf("%lld\n",a[r]-a[l-1]);
}
return 0;
} B、莫的难题
思路:给你一个数,用数字表示,往年蓝桥杯有道题“年号字串”,是用字母
表示一个数,其实就是转为26进制,那这里就是5进制了。
需要注意的是,不管是那个题目,不管是蓝桥杯的26进制和这道题的5进制,是没有0的,也就是要考虑26的倍数和5的倍数.
解决方法就是,如果这一位是26或者5就向高位借1。 在90%的数据里是会大于1e9的,也就是说在求快速幂的时候如果不先取余就会溢出,那么就只能a10%了。
Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll fac[106];
ll qpow(ll x,ll y){
x %= mod;
ll ans = 1;
while(y){
if(y&1) ans = ans*x%mod;
x = x*x%mod;
y >>= 1;
}
return ans;
}
char mp[7]={'0','1','2','3','5','9'},a[15];
int pos;
void solve(int n,int flag) {
n-=(flag==1);
if(n>5) solve(n/5,n%5==0);
if(n%5) n%=5;
else n=5;
a[pos++]=mp[n];
}
int main() {
int t,n,m;
fac[0]=1;
for(int i=1;i<=105;++i) fac[i]=i*fac[i-1]%mod;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m); pos=0;
ll ans=fac[n]*qpow(fac[m]*fac[n-m],mod-2)%mod;
solve(ans,0);
a[pos]='\0';
puts(a);
}
return 0;
} C、不平衡数组
待补
D、数列统计
打表:X=3
L=1:
ans=1
L=2:
ans=3=X
L=3
ans=3+2+1=x+...+1=
L=4
ans==
L=5
可以根据前面的递推结果猜到现在应该是,验证后还真是,那么递推式就有了:
组合数用逆元+阶乘求就可以了。
Code:
#pragma GCC target("avx,sse2,sse3,sse4,popcnt")
#pragma GCC optimize("O2,O3,Ofast,inline,unroll-all-loops,-ffast-math")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define pb push_back
#define pll pair<ll,ll>
#define INF 0x3f3f3f3f
const int mod = 911451407;
const int maxn = 100005;
#define stop system("pause")
inline ll read(){
ll s = 0, w = 1; char ch = getchar();
while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }
while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
ll fac[2000005];
ll qpow(ll x,ll y){
x %= mod;
ll ans = 1;
while(y){
if(y&1) ans = ans*x%mod;
x = x*x%mod;
y >>= 1;
}
return ans;
}
int main(){
fac[0] = 1;
for(int i = 1 ; i < 2000005 ; ++i) fac[i] = fac[i-1]*i%mod;
int t = read();
while(t--){
ll l = read(),x= read();
ll ans = fac[x+l-2]*qpow(fac[x-1],911451405)%mod;
ans = ans*qpow(fac[l-1],911451405)%mod;
cout<<ans<<endl;
}
}

京公网安备 11010502036488号