Codeforces Global Round 1(combine)

比赛链接:https://codeforces.com/contest/1110

B:

  求最小的修复花费,用k个胶带修补n个漏洞,就是要修补覆盖n-k段区间,求覆盖区间和的最小值即可,对区间排序,取最小的n-k个

  (代码略)

C:字丑轻喷QAQ。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long power(long long a,long long p){
 4     long long ans=1,temp=a;
 5     while(p){
 6         if(p&1) ans=ans*temp;
 7         temp=temp*temp;
 8         p>>=1;
 9     }
10     return ans;
11 }
12 long long divisor(long long k)
13 {
14     long long ans=0;int i;
15     for(i=2;i*i<=k;i++)
16     {
17         if(k%i==0) {ans=i;break;}
18     }
19     if (ans==0) return 1;
20     return k/ans;
21 }
22 long long solve(long long k)
23 {
24     for(long long i=2;i<=25;i++)
25     {    
26         if(k==power(2,i)-1) return divisor(k);
27     }
28     return power(2,ceil(log2(k+1)))-1;
29 }
30 int main()
31 {
32     long long n;
33     cin>>n;
34     while(n--)
35     {
36         long long t;cin>>t;
37         cout<<(solve(t))<<endl;
38     }
39     return 0;
40 }
原文地址:https://www.cnblogs.com/codeoosacm/p/10367383.html