【找规律】计蒜客17118 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E. Maximum Flow
题意:一张有n个点的图,结点被编号为0~n-1,i往所有编号比它大的点j连边,权值为i xor j。给你n,问你最大流。
打个表,别忘了把相邻两项的差打出来,你会发现神奇的规律……你会发现每个答案都是由某些特定的数加起来组成的,最好把它们也打出来。
#include<cstdio> using namespace std; typedef long long ll; #define MOD 1000000007ll ll n; int main(){ // freopen("e.out","w",stdout); while(scanf("%lld",&n)!=EOF){ if(n==2ll){ puts("1"); continue; } ll ans=1; ans=(ans+((n/2ll)%MOD*2ll)%MOD)%MOD; ll pw1=4ll,pw2=4ll,pw3=2ll; for(int i=1;pw2+1ll<=n;++i){ if(n>=pw3+pw2){ ans=(ans+((((n-pw3-pw2)/(pw3*2ll)+1ll+((n-pw3-pw2)%(pw3*2ll)==0ll ? 0ll : 1ll))%MOD)*((pw1+1ll)%MOD))%MOD)%MOD; } else{ ans=(ans+(pw1+1ll)%MOD)%MOD; } pw1=(pw1*4ll)%MOD; pw2=pw2*2ll; pw3=pw3*2ll; } printf("%lld\n",ans); } return 0; }
——The Solution By AutSky_JadeK From UESTC
转载请注明出处:http://www.cnblogs.com/autsky-jadek/