A:牛牛掷硬币
直接调用库函数即可。
return to_string(pow(0.5,n)*2+0.005).substr(0,4);
B:牛牛摆玩偶
这道题的做法是采用二分的方式。二分最近距离的最大值,然后检查能不能按照这种间隔摆放玩偶。摆放的时候是采用贪心的策略,尽可能地让摆放的距离等于我们枚举的二分答案。注意先要给结构体排序!
vector<Interval> s;
int nn,mm,size;
typedef long long ll;
bool cmp(Interval a,Interval b){
if(a.end==b.end) return a.start<b.start;
else return a.end<b.end;
}
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param n int整型 玩偶数
* @param m int整型 区间数
* @param intervals Interval类vector 表示区间
* @return int整型
*/
bool check(ll D)
{
ll lastpos=-D;int sum=0;
for(int i=0;i<mm;++i)
{
ll sta=max(lastpos+D,(ll)s[i].start);
while(sta<=s[i].end) sum++,sta+=D;
lastpos=sta-D;
}
if(sum>=nn) return true;
else return false;
}
int doll(int n, int m, vector<Interval>& intervals) {
nn=n,mm=m,s=intervals;
sort(s.begin(),s.end(),cmp);
ll l=0,r=1e18;
while(l+1<r)
{
ll mid=(r-l)/2+l;
if(check(mid)) l=mid;
else r=mid;
}
return l;
}
};
C:交叉乘
我们令 T [ l ] = ∑ i = l n a i ∗ ∑ j = i + 1 n a j , s u m [ l ] = ∑ i = l n a i T[l]=\sum_{i=l}^n a_i * \sum_{j=i+1} ^n a_j,sum[l]=\sum_{i=l} ^n a_i T[l]=∑i=lnai∗∑j=i+1naj,sum[l]=∑i=lnai,那么最终求解的答案就应该是: S = T [ l ] − T [ r + 1 ] − ( s u m [ l ] − s u m [ r + 1 ] ) ∗ s u m [ r + 1 ] S=T[l]-T[r+1]-(sum[l]-sum[r+1])*sum[r+1] S=T[l]−T[r+1]−(sum[l]−sum[r+1])∗sum[r+1]
const int maxn=1e5+100;
const int mod=1000000007;
typedef long long ll;
ll T[maxn],sum[maxn];
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 多次求交叉乘
* @param a int整型vector a1,a2,...,an
* @param query int整型vector l1,r1,l2,r2,...,lq,rq
* @return int整型vector
*/
vector<int> getSum(vector<int>& a, vector<int>& query) {
int size=a.size();sum[size]=0;T[size]=0;
//int rec=size;
for(int i=size-1;i>=0;--i) sum[i]=(sum[i+1]+a[i])%mod;
for(int i=size-1;i>=0;--i) T[i]=(T[i+1]+sum[i+1]*a[i]%mod)%mod;
int num=query.size();num/=2;
vector<int> ans;ans.clear();
for(int i=0;i<num;++i)
{
int l=query[i*2]-1,r=query[i*2+1]-1;
if(l==r) {
ans.push_back(0);continue;}
ll tot=(((T[l]-T[r+1])%mod-(sum[l]-sum[r+1])%mod*sum[r+1]%mod)%mod+mod)%mod;
ans.push_back(tot);
}
return ans;
}
};