2019牛客多校第5场

训练记录

辣鸡lfw和傻逼byf互相表演,都没看出直接暴力跑B得快速幂是1e6*1e6的复杂度,写了一万年,lfw还因为搞错了a,b顺序半天过不了样例,10次方的快速幂byf自己讲课的课件上有,然后别的队看着他课件写得,他自己不会,需要好好复习。导致后面很多很水的题没写。难顶,以后不要3个人同时做一道题。

题解

比赛链接:https://ac.nowcoder.com/acm/contest/885#question

A digits 2

输出n遍n

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n;
 5 
 6 int main()
 7 {
 8     int t;
 9     scanf("%d",&t);
10     for(int i=1;i<=t;i++)
11     {
12         scanf("%d",&n);
13         for(int j=1;j<=n;j++)
14             printf("%d",n);
15         puts("");
16     }
17     return 0;
18 }
View Code

B generator 1

题解:https://blog.csdn.net/liufengwei1/article/details/98115711

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int size=1e6+5;
 5 char n[size];
 6 int x0,x1,a,b;
 7 typedef long long LL;
 8 LL mod;
 9 struct mat
10 {
11     int m[3][3];
12     mat(){for(int i=0;i<3;i++)for(int j=0;j<3;j++) m[i][j]=0;}
13     friend mat operator*(mat x,mat y)
14     {
15         mat ans;
16         for(int i=1;i<=2;i++)
17         {
18             for(int j=1;j<=2;j++)
19             {
20                 for(int k=1;k<=2;k++)
21                 {
22                     ans.m[i][k] = (ans.m[i][k]+1LL*x.m[i][j]*y.m[j][k])%mod;
23                 }
24             }
25         }
26         return ans;
27     }
28 };
29 inline mat quick_pow(mat a,int b)
30 {
31     mat ans;
32     ans.m[1][1]=1;ans.m[2][2]=1;
33     while(b)
34     {
35         if(b&1) ans=ans*a;
36         a=a*a;
37         b>>=1;
38     }
39     return ans;
40 }
41 int main()
42 {
43     scanf("%d%d%d%d",&x0,&x1,&a,&b);
44     scanf("%s%lld",n,&mod);
45     mat ori;
46     int len =strlen(n);
47     ori.m[1][2]=1,ori.m[2][1]=b;ori.m[2][2]=a;
48     mat ans;
49     ans.m[1][1]=1;ans.m[2][2]=1;
50     for(int i=len-1;i>=0;i--)
51     {
52         ans=ans*quick_pow(ori,n[i]-'0');
53         ori=quick_pow(ori,10);
54     }
55     printf("%lld\n",(1LL*x0*ans.m[1][1]+1LL*x1*ans.m[1][2])%mod);
56 }
View Code

C generator 2

D generator 3

unsolved

E independent set 1

题解:https://blog.csdn.net/liufengwei1/article/details/98207215

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n,m,sum;
 5 int e[27],mi[27];
 6 char dp[1<<26];
 7 
 8 inline void prework()
 9 {
10     scanf("%d%d",&n,&m);
11     int u,v;
12     for(int i=1;i<=m;i++)
13     {
14         scanf("%d%d",&u,&v);
15         e[v]|=(1<<u);
16         e[u]|=(1<<v);
17     }
18     mi[0]=1;
19     for(int i=1;i<=n;i++)
20         mi[i]=mi[i-1]*2;
21     int s=(1<<n)-1;
22     for(int i=0;i<n;i++)
23         e[i]=s^(e[i]|mi[i]);
24 }
25 
26 inline void mainwork()
27 {
28     int s=(1<<n)-1;
29     int x,id;
30     for(int i=1;i<=s;i++)
31     {
32         x=i&-i;id=log2(x);
33         dp[i]=max(dp[i^x],(char)(dp[i&e[id]]+1));
34         sum+=dp[i];
35     }
36 }
37 
38 inline void print()
39 {
40     printf("%d",sum);
41 }
42 
43 int main()
44 {
45     prework();
46     mainwork();
47     print();
48     return 0;
49 }
View Code

F maximum clique 1

G subsequence 1

基础DP题,不想写题解= =

 1 #include<bits/stdc++.h>
 2 #define maxl 3010
 3 using namespace std;
 4 
 5 const int mod=998244353;
 6 int n,m,ans;
 7 int f[maxl][maxl][2];
 8 int dp[maxl][maxl];
 9 char s[maxl],t[maxl];
10 
11 inline void prework()
12 {
13     scanf("%d%d",&n,&m);
14     scanf("%s%s",s+1,t+1);
15     for(int i=0;i<=n;i++)
16         for(int j=0;j<=n;j++)
17         {
18             f[i][j][1]=f[i][j][0]=0;
19             dp[i][j]=0;
20         }
21     for(int i=0;i<=n;i++)
22         f[i][0][0]=1,dp[i][0]=1;
23 }
24 
25 inline void mainwork()
26 {
27     for(int i=1;i<=n;i++)
28     {
29         if(s[i]!='0')
30         {
31             if(s[i]>t[1])
32             {
33                 f[i][1][1]=((f[i-1][1-1][1]+f[i-1][1-1][0])%mod+f[i-1][1][1])%mod;
34                 f[i][1][0]=f[i-1][1][0];
35             }
36             else if(s[i]==t[1])
37             {
38                 f[i][1][1]=(f[i-1][1-1][1]+f[i-1][1][1])%mod;
39                 f[i][1][0]=(f[i-1][1-1][0]+f[i-1][1][0])%mod;
40             }
41             else
42                 f[i][1][1]=f[i-1][1][1],f[i][1][0]=f[i-1][1][0];
43         }
44         else
45             f[i][1][1]=f[i-1][1][1],f[i][1][0]=f[i-1][1][0];
46         for(int j=2;j<=m;j++)
47         {
48             if(s[i]>t[j])
49             {
50                 f[i][j][1]=((f[i-1][j-1][0]+f[i-1][j-1][1])%mod+f[i-1][j][1])%mod;
51                 f[i][j][0]=f[i-1][j][0];
52             }
53             if(s[i]==t[j])
54             {
55                 f[i][j][1]=(f[i-1][j-1][1]+f[i-1][j][1])%mod;
56                 f[i][j][0]=(f[i-1][j-1][0]+f[i-1][j][0])%mod;
57             }
58             if(s[i]<t[j])
59             {
60                 f[i][j][1]=(f[i-1][j-1][1]+f[i-1][j][1])%mod;
61                 f[i][j][0]=f[i-1][j][0];
62             }
63         }
64     }
65     for(int i=1;i<=n;i++)
66     {
67         if(s[i]!='0')
68             dp[i][1]=(dp[i-1][1]+dp[i-1][1-1])%mod;
69         else
70             dp[i][1]=dp[i-1][1];
71         for(int j=2;j<=n;j++)
72             dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%mod;
73     }
74     ans=f[n][m][1];
75     for(int i=m+1;i<=n;i++)
76         ans=(ans+dp[n][i])%mod;
77     
78 }
79 
80 inline void print()
81 {
82     printf("%d\n",ans);
83 }
84 
85 int main()
86 {
87     int t;
88     scanf("%d",&t);
89     for(int i=1;i<=t;i++)
90     {
91         prework();
92         mainwork();
93         print();
94     }
95     return 0;
96 }
View Code

H subsequence 2

题解:https://blog.csdn.net/liufengwei1/article/details/98100854

 1 #include<bits/stdc++.h>
 2 #define maxl 100010
 3 using namespace std;
 4  
 5 int n,m;
 6 int pos[26][maxl];
 7 int len,mlen[26];
 8 char ch[10];
 9 char s[maxl];
10 char ans[maxl];
11 bool in[maxl];
12 bool flag;
13  
14 inline void prework()
15 {
16     scanf("%d%d",&n,&m);
17     int cnt0,cnt1;
18     memset(mlen,-1,sizeof(mlen));
19     flag=true;
20     for(int i=1;i<=m*(m-1)/2;i++)
21     {
22         scanf("%s%d",ch,&len);
23         cnt0=cnt1=0;
24         if(len>0)
25         {
26             scanf("%s",s+1);
27             for(int j=1;j<=len;j++)
28             {
29                 if(s[j]==ch[0])
30                 {
31                     cnt0++;
32                     pos[ch[0]-'a'][cnt0]+=cnt1;
33                 }
34                 else
35                 {
36                     cnt1++;
37                     pos[ch[1]-'a'][cnt1]+=cnt0;
38                 }
39             }
40         }
41         if(mlen[ch[0]-'a']==-1)
42             mlen[ch[0]-'a']=cnt0;
43         else if(mlen[ch[0]-'a']!=cnt0)
44             flag=false;
45         if(mlen[ch[1]-'a']==-1)
46             mlen[ch[1]-'a']=cnt1;
47         else if(mlen[ch[1]-'a']!=cnt1)
48             flag=false;
49     }
50 }
51  
52 inline void mainwork()
53 {
54     if(!flag) return;
55     for(int i=0;i<m;i++)
56         for(int j=1;j<=mlen[i];j++)
57         if(pos[i][j]+j<=n)
58         {    
59             if(!in[pos[i][j]+j])
60             {
61                 ans[pos[i][j]+j]='a'+i;
62                 in[pos[i][j]+j]=true;
63             }
64             else
65             {
66                 flag=false;
67                 return;
68             }
69         }
70         else
71         {
72             flag=false;
73             return;
74         }
75     for(int i=1;i<=n;i++)
76     if(!in[i])
77     {
78         flag=false;
79         return;
80     }
81 }
82  
83 inline void print()
84 {
85     if(flag)
86         for(int i=1;i<=n;i++)
87             printf("%c",ans[i]);
88     else
89         puts("-1");
90 }
91  
92 int main()
93 {
94     prework();
95     mainwork();
96     print();
97     return 0;
98 }
View Code

 I three points 1

题解:https://blog.csdn.net/liufengwei1/article/details/98179088

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3  
  4 const double eps=9e-7;
  5  
  6 double w,h;
  7 double a[4];
  8 double b[4];
  9 bool flag;
 10 struct node
 11 {
 12     double x,y;
 13     node(double a=0,double b=0)
 14     {
 15         x=a;y=b;
 16     }
 17     void transxy(double sinb,double cosb)
 18     {
 19         double tx=x,ty=y;
 20         x=tx*cosb-ty*sinb;
 21         y=tx*sinb+ty*cosb;
 22     }
 23 }ans[4];
 24  
 25 inline int sgn(double x)
 26 {
 27     if(x>-eps && x<eps) return 0;
 28     if(x>0) return 1;
 29     else    return -1;
 30 }
 31  
 32 inline void prework()
 33 {
 34     scanf("%lf%lf",&w,&h);
 35     for(int i=1;i<=3;i++)
 36         scanf("%lf",&a[i]),b[i]=a[i];
 37 }
 38  
 39 inline bool jug(double w,double h,double a,double b,double c)
 40 {
 41     double sita1=acos((a*a+c*c-b*b)/(2*a*c));
 42     double sita2=max(a>w?acos(w/a):0.0,c>w?acos(w/c)-sita1:0.0);
 43     ans[1]=node{a*cos(sita2),a*sin(sita2)};
 44     ans[2]=node{0.0,0.0};
 45     ans[3]=node{c*cos(sita1+sita2),c*sin(sita1+sita2)};
 46     for(int i=1;i<=3;i++)
 47     if(ans[i].x<=-eps || ans[i].x>=w+eps || ans[i].y<-eps || ans[i].y>h+eps)
 48         return false;
 49     return true;
 50 }
 51 
 52 inline void mainwork()
 53 {
 54     int rev;
 55     for(rev=0;rev<2;rev++)
 56     {
 57         if(jug(w,h,a[1],a[2],a[3]))
 58             break;
 59         if(jug(w,h,a[1],a[3],a[2]))
 60         {
 61             swap(ans[1],ans[2]);
 62             break;
 63         }
 64         if(jug(w,h,a[2],a[1],a[3]))
 65         {
 66             swap(ans[2],ans[3]);
 67             break;
 68         }
 69         if(jug(w,h,a[2],a[3],a[1]))
 70         {
 71             swap(ans[1],ans[2]);
 72             swap(ans[2],ans[3]);
 73             break;
 74         }
 75         if(jug(w,h,a[3],a[1],a[2]))
 76         {
 77             swap(ans[1],ans[3]);
 78             swap(ans[2],ans[3]);
 79             break;
 80         }
 81         if(jug(w,h,a[3],a[2],a[1]))
 82         {
 83             swap(ans[1],ans[3]);
 84             break;
 85         }
 86         swap(w,h);
 87     }
 88     if(rev)
 89     {
 90         for(int i=1;i<=3;i++)
 91             swap(ans[i].x,ans[i].y);
 92     }
 93 }
 94  
 95 inline void print()
 96 {
 97     for(int i=1;i<=2;i++)
 98         printf("%.9f %.9f ",ans[i].x,ans[i].y);
 99     printf("%.9f %.9f\n",ans[3].x,ans[3].y);
100 }
101  
102 int main()
103 {
104     int t;
105     scanf("%d",&t);
106     for(int i=1;i<=t;i++)
107     {
108         prework();
109         mainwork();
110         print();
111     }
112     return 0;
113 }
View Code

J three points 2

unsolved

猜你喜欢

转载自www.cnblogs.com/songorz/p/11288983.html