F. Trig Function

2017 icpc 西安网络赛

样例输入

2 0
2 1
2 2

样例输出

998244352
0
2

找啊找啊找数列和论文。cosnx可以用切比雪夫多项式弄成(cosx)的多项式,然后去找到了相关的公式:
2017 icpc 西安网络赛

 2017 icpc 西安网络赛

2017 icpc 西安网络赛

 然后写个快速幂预处理啥的,很快就解决了~

 1 #include<bits/stdc++.h>
 2 #define clr(x) memset(x,0,sizeof(x))
 3 #define clr_1(x) memset(x,-1,sizeof(x))
 4 #define LL long long
 5 #define mod 998244353
 6 using namespace std;
 7 LL jc[10010],djc[10010];
 8 LL n,m,k,ans;
 9 LL quick_pow(LL x,LL n)
10 {
11     LL res=1;
12     x=(x%mod+mod)%mod;
13     while(n)
14     {
15         if(n&1)
16             res=res*x%mod;
17         x=x*x%mod;
18         n>>=1;
19     }
20     return res;
21 }
22 
23 void init()
24 {
25     jc[1]=jc[0]=1;
26     for(int i=2;i<=10000;i++)
27         jc[i]=(jc[i-1]*i)%mod;
28     djc[10000]=quick_pow(jc[10000],mod-2);
29     for(int i=9999;i>=1;i--)
30         djc[i]=djc[i+1]*(i+1)%mod;
31     djc[0]=1;
32     return ;
33 }
34 int main()
35 {
36     init();
37     while(scanf("%lld%lld",&n,&m)!=EOF)
38     {
39         if(m>n || m<0 || (n-m)%2!=0)
40         {
41             printf("0\n");
42             continue;
43         }
44         ans=(n-m)/2%2==1?-1:1;
45         ans=(ans*djc[m]*n%mod+mod)%mod;
46         if(n-m<=n+m-2)
47             for(LL i=n-m+2;i<=n+m-2;i+=2)
48                 ans=ans*(i%mod)%mod;
49         else
50             for(LL i=n-m;i>n+m-2;i-=2)
51                 ans=ans*quick_pow(i,mod-2)%mod;
52         printf("%lld\n",ans);
53     }
54     return 0;
55 }
View Code

E。 Maximum Flow

2017 icpc 西安网络赛

 

 

样例输入

2

样例输出

1

这题可以用最大流最小割推推,但我~找规律的2333。

首先是2^k的n(默认n--了),那么所有的从0出来的流都能到达终点,也就是流量为(n+1)*n/2。然后写个最大流打个表,然后将i和i-1作差。可以发现在2^k~2^(k+1)的数中,差为2(2^0+1)每隔2个出现,差为5(2^2+1)每隔4个出现,17(2^4+1)每隔8个出现。。。依此类推。然后你懂得~。

 1 #include<bits/stdc++.h>
 2 #define clr(x) memset(x,0,sizeof(x))
 3 #define LL long long
 4 #define mod 1000000007
 5 using namespace std;
 6 LL quick_pow(LL x, LL n) {
 7     LL res = 1;
 8     x=(x%mod+mod)%mod;
 9     while(n) {
10         if(n&1)
11             res=res*x% mod;
12         n >>=1;
13         x =x*x% mod;
14     }
15     return res;
16 }
17 int main()
18 {
19     LL n,m,q,l,ans,k,kk;
20     int t;
21     while(scanf("%lld",&n)!=EOF)
22     {
23         t=0;
24         n--;
25         m=n;
26         while(m)
27         {
28             t++;
29             m>>=1;
30         }
31         q=1;
32         m=(q<<(t-1));
33         ans=(m%mod)*((1+m)%mod)%mod;
34         ans=ans*quick_pow(2,mod-2)%mod;
35         n-=m;
36         kk=1;
37         k=2;
38         while(k<=n+kk)
39         {
40             ans=(ans%mod+(((n+kk)/k)%mod)*((kk%mod)*(kk%mod)%mod+1)%mod)%mod;
41             if(k==LLONG_MAX)
42                 break;
43             kk=k;
44             k<<=1;
45         }
46         printf("%lld\n",ans);
47     }
48     return 0;
49 }
View Code

相关文章:

  • 2021-05-26
  • 2021-07-27
  • 2021-05-30
  • 2021-07-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-25
  • 2021-10-29
  • 2022-12-23
  • 2021-07-03
  • 2022-12-23
相关资源
相似解决方案