• Gym 101972


    F读错题wa了三个小时。自闭了,不然I题有可能能出的。。已经想到组合数也敲完组合数板子了。

    A:这。。。**题吧,第一眼看的这个就秒了

     1 #include<bits/stdc++.h>
     2 #define pii pair<int,int>
     3 #define mk(a,b) make_pair(a,b)
     4 using namespace std;
     5 typedef long long ll;
     6 int a[11],b[11];
     7 void slove(int n,int id){
     8     if(id==1) {
     9         int k = 0;
    10         while (n) {
    11             k++;
    12             a[k] = n % 10;
    13             a[k]*=pow(10,k-1);
    14             n /= 10;
    15         }
    16     } else{
    17         int k = 0;
    18         while (n) {
    19             k++;
    20             b[k] = n % 10;
    21             b[k]*=pow(10,k-1);
    22             n /= 10;
    23         }
    24     }
    25 }
    26 int t,x,y;
    27 vector<pii>ans;
    28 int main(){
    29     ios::sync_with_stdio(false);
    30     cin>>t;
    31     while (t--){
    32         memset(a,0, sizeof(a));
    33         memset(b,0, sizeof(b));
    34         ans.clear();
    35         cin>>x>>y;
    36         slove(x,1);
    37         slove(y,2);
    38         for(int i=1;i<=10;i++){
    39             if(a[i]==0)
    40                 continue;
    41             for(int j=1;j<=10;j++){
    42                 if(b[j]==0)
    43                     continue;
    44                 ans.push_back(mk(a[i],b[j]));
    45             }
    46         }
    47         for(int i=0;i<ans.size();i++){
    48             if(i==ans.size()-1){
    49                 cout<<ans[i].first<<" x "<<ans[i].second<<endl;
    50             } else{
    51                 cout<<ans[i].first<<" x "<<ans[i].second<<" + ";
    52             }
    53         }
    54     }
    55 }
    View Code

    B: 这篇写的很好  https://blog.csdn.net/lzc504603913/article/details/83863102

    有几个关键的性质一定要注意到。

    如果一个点有两颗儿子,那么这个点的祖先全部没有答案。

    如果一个点有三个及以上儿子,这个点及这个点的祖先全部没有答案。

    如果一个点没答案,他的所有祖先全没答案。

    那么我们可以把点分为三类。1.没答案的 2. 一条链的 3. 两条链的(也就是这个点有两个儿子,然后这两个儿子是两条链,不然没答案嘛)

    然后我们考虑题目要求满足的条件。  

    唔...那篇说的太好了我目前还想不到其他更好的表达方式了。。。复述一遍没有多大意义,请移步去看上面那个链接吧。

    (我懒得敲等式什么的(大雾))

    C:又卡cin。。。小学数学题

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int t;
     5 double a,b,c,x;
     6 int main(){
     7     //ios::sync_with_stdio(false);
     8     scanf("%d",&t);
     9     while (t--){
    10         scanf("%lf%lf%lf%lf",&a,&b,&c,&x);
    11         double ans = 0;
    12         ans+=sqrt(a*a+(b+c+c)*(b+c+c));
    13         x/=100;
    14         ans += sqrt(b*b+a*a)*x;
    15         ans+=sqrt((c+c+b*(1.0-x))*(c+c+b*(1.0-x))+a*(1.0-x)*a*(1.0-x));
    16         printf("%.10f
    ",ans);
    17     }
    18 }
    View Code

    D:**

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int t,n,x,y;
     5 int main(){
     6     ios::sync_with_stdio(false);
     7     cin>>t;
     8     while (t--){
     9         cin>>n>>x>>y;
    10         if(n%2==0){
    11             if(x>=n/2&&y>=n/2)
    12                 cout<<"YES"<<endl;
    13             else
    14                 cout<<"NO"<<endl;
    15         } else{
    16             if(y>=n/2&&x>=n/2+1)
    17                 cout<<"YES"<<endl;
    18             else
    19                 cout<<"NO"<<endl;
    20         }
    21     }
    22 }
    View Code

    E:我做的很麻烦,可以不开那个数组,直接记录当前已知的最大测试数据就行

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int t,k,n,m;
     5 char c[10005];
     6 int vis[10005];
     7 void slove(int st,int en){
     8     for(int i=st;i<=en;i++)
     9         vis[i]=(c[i]=='S');
    10 }
    11 int main(){
    12     ios::sync_with_stdio(false);
    13     cin>>t;
    14     while (t--){
    15         memset(vis,0, sizeof(vis));
    16         memset(c,0, sizeof(c));
    17         cin>>n>>m>>k;
    18         for(int i=1;i<=n;i++)
    19             cin>>c[i];
    20         int mx = k;
    21         slove(1,mx);
    22         int ans = 0;
    23         char op;int x;
    24         while (m--){
    25             cin>>op;
    26             if(op=='A'){
    27                 slove(mx+1,n);
    28                 mx = n;
    29             } else{
    30                 cin>>x;
    31                 if(x>mx){
    32                     slove(mx+1,x);
    33                     mx = x;
    34                 } else{
    35                     if(vis[x])
    36                         ans++;
    37                 }
    38             }
    39         }
    40         cout<<ans<<endl;
    41     }
    42 }
    View Code

    F:我以为必须要全部用完,也就是“恰好”才可以。。。******************

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 ll a[27],t,s1,s2,minn,ans,sum;
     5 int main() {
     6     ios::sync_with_stdio(false);
     7     cin>>t;
     8     while(t--) {
     9         minn=1e12;
    10         ans=s1=s2=sum=0;
    11         for(int i=1;i<=26;i++) {
    12             cin>>a[i];
    13             if(a[i]==1)s1++;
    14             if(a[i]>=2) {
    15                 s2++;
    16                 minn=min(a[i]/2,minn);
    17             }
    18         }
    19         ans=s2*2;
    20         if(s1>0) {
    21             ans++;
    22             sum=min(minn,s1);
    23         }
    24         else
    25             sum=minn;
    26         if(minn==1e12)sum=s1;
    27         cout<<ans<<' '<<sum<<endl;
    28     }
    29     return 0;
    30 }
    View Code

    G:从四个角分别维护一下然后枚举删掉的行列

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int t,n,m;
     5 int a[505][505];
     6 int plu[505][505];
     7 int pru[505][505];
     8 int pld[505][505];
     9 int prd[505][505];
    10 void init(){
    11     memset(plu,0, sizeof(plu));
    12     memset(pru,0, sizeof(pru));
    13     memset(pld,0, sizeof(pld));
    14     memset(prd,0, sizeof(prd));
    15     memset(a,0, sizeof(a));
    16 }
    17 int main(){
    18     ios::sync_with_stdio(false);
    19     cin>>t;
    20     while (t--) {
    21         init();
    22         cin >> n >> m;
    23         for (int i = 1; i <= n; i++)
    24             for (int j = 1; j <= m; j++)
    25                 cin >> a[i][j];
    26         for(int i=1;i<=n;i++){
    27             for(int j=1;j<=m;j++){
    28                 plu[i][j]=max(max(plu[i-1][j],plu[i][j-1]),a[i][j]);
    29             }
    30         }
    31         for(int i=1;i<=n;i++){
    32             for(int j=m;j>=1;j--){
    33                 pru[i][j]=max(max(pru[i][j+1],pru[i-1][j]),a[i][j]);
    34             }
    35         }
    36         for(int i=n;i>=1;i--){
    37             for(int j=1;j<=m;j++){
    38                 pld[i][j]=max(max(pld[i+1][j],pld[i][j-1]),a[i][j]);
    39             }
    40         }
    41         for(int i=n;i>=1;i--){
    42             for(int j=m;j>=1;j--){
    43                 prd[i][j]=max(max(prd[i+1][j],prd[i][j+1]),a[i][j]);
    44             }
    45         }
    46         int ans = 1e9+1;
    47         for(int i=2;i<n;i++){
    48             for(int j=2;j<m;j++){
    49                 ans = min(ans,max(max(max(plu[i-1][j-1],prd[i+1][j+1]),pru[i-1][j+1]),pld[i+1][j-1])-min(min(min(plu[i-1][j-1],prd[i+1][j+1]),pru[i-1][j+1]),pld[i+1][j-1]));
    50             }
    51         }
    52         cout<<ans<<endl;
    53     }
    54 }
    View Code

    H:暴力统计出来所有的字母对就行。我是直接维护个前缀

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int t,n,m,k;
     5 string a,b;
     6 int pre[26];
     7 int cnt[26][26];
     8 int vis[26][26];
     9 int main(){
    10     ios::sync_with_stdio(false);
    11     cin>>t;
    12     while (t--){
    13         cin>>n>>m>>k>>a>>b;
    14         a="*"+a;b="*"+b;
    15         memset(pre,0, sizeof(pre));
    16         memset(cnt,0, sizeof(cnt));
    17         memset(vis,0, sizeof(vis));
    18         for(int i=1;i<=m;i++){
    19             pre[b[i]-'a']=pre[b[i]-'a']+1;
    20             for(int j=0;j<26;j++){
    21                 cnt[b[i]-'a'][j]+=pre[j];
    22             }
    23         }
    24         int l=1,r=k;
    25         ll ans = 0;
    26         while (r<=n){
    27             if(vis[a[r]-'a'][a[l]-'a']){}
    28             else
    29                 ans+=cnt[a[r]-'a'][a[l]-'a'],vis[a[r]-'a'][a[l]-'a']=1;
    30             l++,r++;
    31         }
    32         cout<<ans<<endl;
    33     }
    34 }
    View Code

    I:锁的方案数猜也能猜出来。。。

    考虑 任选 m-1 个人,有C(n,m-1)种方案,每种方案都打不开,也就是都有至少一把锁是打不开的,所以锁最少是C(n,m-1)种。

    对于钥匙,考虑先拿出来一个人,然后在n-1个人里选m-1个人,有C(n-1,m-1)种方案数,对于每种方案数,这个人都要有对应的钥匙,所以就是C(n-1,m-1)种方案数

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const ll mod = 1e9+7;
     5 ll up[100005],inv[100005],down[100005];//down就是分子(分母*乘法逆元
     6 void init(){
     7     up[0]=1;
     8     for(int i=1;i<=100000;i++){
     9         up[i]=up[i-1]*i % mod;
    10     }
    11     inv[1]=1;//乘法逆元板纸,其实我也不懂...
    12     for(int i=2;i<=100000;i++){
    13         inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    14     }
    15     down[0]=1;
    16     for(int i=1;i<=100000;i++){
    17         down[i]=down[i-1]*inv[i]%mod;
    18     }
    19 }
    20 ll C(ll x,ll y){//组合数(逃...
    21     return up[x]*down[y]%mod*down[x-y]%mod;
    22 }
    23 int t;
    24 ll n,m;
    25 int main(){
    26     ios::sync_with_stdio(false);
    27     init();
    28     cin>>t;
    29     while (t--){
    30         cin>>n>>m;
    31         cout<<C(n,m-1)<<" "<<C(n-1,m-1)<<endl;
    32     }
    33 }
    View Code

    J:遇见过,hdu上的好像是,问你杨辉三角第n行奇数的个数,这个是有规律的,一百度啥都有,就直接秒了

    那个,,你要是看不出来这公式就是组合数就当我啥都没说。。。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int t;
     5 ll n;
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin>>t;
     9     while (t--){
    10         cin>>n;
    11         int num = 0;
    12         ll tmp = n;
    13         while (n){
    14             if(n&1)
    15                 num++;
    16             n>>=1;
    17         }
    18         cout<<((tmp+1)-(1ll<<num))<<endl;
    19     }
    20 }
    View Code

    K:一开始又看错了感觉奇难无比,但是A题那么**的题竟然人数跟K差不多,就重新看了下,,发现他这个只能按照顺序平移一位。。。

    我一开始看成只要是能组成一个环就可以。。。然后头痛欲裂。。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int na[26],nb[26];
     5 int t;
     6 string a,b;
     7 int main(){
     8     ios::sync_with_stdio(false);
     9     cin>>t;
    10     while (t--){
    11         memset(na,0, sizeof(na));
    12         memset(nb,0, sizeof(nb));
    13         int x;cin>>x;
    14         cin>>a>>b;
    15         string aa="",bb="";
    16         for(int i=0;i<x;i++){
    17             if(a[i]!=b[i]){
    18                 aa+=a[i];
    19                 bb+=b[i];
    20             }
    21         }
    22         int n = aa.length();
    23         int flag = 1;
    24         for(int i=1;i<n;i++){
    25             if(aa[i]!=bb[i-1]) {
    26                 flag = 0;
    27                 break;
    28             }
    29         }
    30         if(aa[0]!=bb[n-1])
    31             flag = 0;
    32         if(flag)
    33             cout<<"YES"<<endl;
    34         else
    35             cout<<"NO"<<endl;
    36     }
    37 }
    View Code

    这个B题感觉有点硬核,主要是我也没去想B题咋做。除此之外失误太多了。理论10题实际8题。。。另外3星场水题也太多了。。。说实话我们出的新生赛的那些水题都比大多数的三星场难很多。。。

    滚回宿舍了。明天下午尽量快点做完计组实验然后去新生赛现场凑热闹嘿嘿嘿。

  • 相关阅读:
    tfs2012服务器搭建报表、门户、TFS权限设置
    遥望星空FTP文件同步工具(附源码)1.0 发布
    TortoiseGit连接gitlab,一直要求输入密码
    static、const、readonly与static readonly的区别与联系
    sql server对并发的处理乐观锁和悲观锁
    asp.net控件开发基础系列
    Sonne的健身日志(15)16周腹肌计划第四周感受
    上海新闻!
    Sonne的健身日志(9)16周腹肌计划第一周(2012.3.92012.3.15)
    Sonne的健身日志(5)
  • 原文地址:https://www.cnblogs.com/MXang/p/10085672.html
Copyright © 2020-2023  润新知