2020-01-05友谊赛

A - Problem for Nazar

codeforce 1151C
关键词: 二进制,思维
正解:
算中间一段,那就是后面减去前面。
即现在算1到n这一个范围内的值,通过推断可以知道最后一个奇数是多少,最后一个偶数是多少,而由等差公式求和,可以知道从1开始的连续奇数和为 nn,而从2开始的连续偶数和为n(n+1)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
inline ll dd(ll a,ll b)
{
    ll ans=(a%mod)*(b%mod)%mod;
    return ans;
}
ll suan(ll a)
{
    ll i=0,odd=0,even=0;
    while(a)
    {
        ll now=min(a,(ll)1<<i);
        a-=now;
      if(i%2){even+=now;}
          else {odd+=now;}
      ++i;
    }
    return (dd(odd,odd)+dd(even,even+1)+mod)%mod;
}
int main(void)
{
    ll zuo,you;
    cin>>zuo>>you;
    cout<<(suan(you)-suan(zuo-1)+mod)%mod<<endl;
    return 0;
}

B - How Many Tables

hdu1213
思路:可以用连通图也可以用并查集
正解:此题简单,不贴代码了。

C - Cow and Snacks

CodeForces - 1209D
**题意:**每个客人都喜欢吃2种口味的菜,现在有n种口味的菜,k个客人,安排客人按顺序上来,一个客人上来会把它喜欢的菜都吃完。
**思路:**把菜看作点,客人看做线,线要连接说明这2个点是不连通的,才有连接的意义,有k个客人,则有k条线,故要找一条线路,能够把n个菜都吃完,而线又最多。

D - I Hate It HDU - 1754

思路:线段树

发布了114 篇原创文章 · 获赞 22 · 访问量 7012

猜你喜欢

转载自blog.csdn.net/qq_43235540/article/details/103864512