zoukankan      html  css  js  c++  java
  • 2019CCSU第二次校赛部分题解(A,B,E,G)

    A

    签到题,考虑到数据范围很小直接枚举1,2,3分别取多少个就做完了

     1 #define IO std::ios::sync_with_stdio(false);
     2 #define bug(x) cout<<x<<" "<<endl
     3 #include <bits/stdc++.h>
     4 #define itor ::iterator
     5 using namespace std;
     6 #define pb push_back
     7 typedef long long ll;
     8 typedef double db;
     9 const int N=1e6+10;
    10 int T,n,m,kase;
    11 int a[10],vis[100];
    12 int main(){
    13     scanf("%d",&T);
    14     while(T--){
    15         scanf("%d%d",&kase,&n);
    16         for(int i=1;i<=3;i++)a[i]=0;
    17         for(int i=1;i<=10;i++){
    18             int x;
    19             scanf("%d",&x);
    20             a[x]++;
    21         }
    22         int flag=0;
    23         for(int i=0;i<=a[1];i++){
    24             for(int j=0;j<=a[2];j++){
    25                 for(int k=0;k<=a[3];k++){
    26                     int res=i+j*2+k*3;
    27                     if(res==n){
    28                         flag=1;
    29                         break;
    30                     }
    31                 }
    32             }
    33         }
    34         printf("%d ",kase);
    35         if(flag)printf("YES
    ");
    36         else printf("NO
    ");
    37     }
    38 }

    B

    首先对于这种很有可能是找规律的题,我们可以不去想dp啊

    遇事不对先打表!

     1 #define IO std::ios::sync_with_stdio(false);
     2 #define bug(x) cout<<x<<" "<<endl
     3 #include <bits/stdc++.h>
     4 #define itor ::iterator
     5 using namespace std;
     6 #define pb push_back
     7 typedef long long ll;
     8 typedef double db;
     9 const int N=1e6+10;
    10 int vis[100][2],k;
    11 int ans=0;
    12 int check(int x,int y){
    13     if(x<1||y<1||y>2)return 0;
    14     return 1;
    15 }
    16 int dx[10]={0,0,1,-1};
    17 int dy[10]={1,-1,0,0};
    18 void dfs(int x,int y,int h){
    19     if(h==k){
    20         ans++;
    21         return;
    22     }
    23     for(int i=0;i<4;i++){
    24         int x1=x+dx[i];
    25         int y1=y+dy[i];
    26         if(check(x1,y1)&&!vis[x1][y1]){
    27             vis[x1][y1]=1;
    28             dfs(x1,y1,h+1);
    29             vis[x1][y1]=0;
    30         }
    31     }
    32 }
    33 int main(){
    34     for(int i=1;i<=20;i++){
    35         memset(vis,0,sizeof(vis));
    36         ans=0;
    37         k=i;
    38         vis[1][1]=1;
    39         dfs(1,1,0);
    40         printf("i=%d: %d
    ",i,ans);
    41     }
    42 }

    dfs打表发现答案跟是前两项之和然后和奇偶性也有关,

    然后这个题就很水了。。。

    #define IO std::ios::sync_with_stdio(false);
    #define bug(x) cout<<x<<" "<<endl
    #include <bits/stdc++.h>
    #define itor ::iterator
    using namespace std;
    #define pb push_back
    typedef long long ll;
    typedef double db;
    const int N=1e6+10;
    int T,k,n,mod=1e4+7;
    int a[10005];
    void init(){
        a[1]=2,a[2]=3;
        for(int i=3;i<=1000;i++){
            if(i%2){
                a[i]=(a[i-1]+a[i-2]+1)%mod;
            }
            else a[i]=(a[i-1]+a[i-2])%mod;
        }
    }
    int main(){
        init();
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&k,&n);
            printf("%d %d
    ",k,a[n]);
        }
    }

    E

    有点恶心的题。。竟然没A出来

    显然我们可以枚举正确时间,然后再拿时钟时间和误差时间去配对

    配对我们可以排序然后一直扫一遍,注意输入输出的各种细节即可

    #define IO std::ios::sync_with_stdio(false);
    #define bug(x) cout<<x<<" "<<endl
    #include <bits/stdc++.h>
    #define itor ::iterator
    using namespace std;
    #define pb push_back
    typedef long long ll;
    typedef double db;
    const int N=1e3+10;
    int T,n,m,kase;
    int mod=720;
    int a[20],b[20],vis[20],d[20];
    char s[100];
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&kase,&n);
            for(int i=1;i<=n;i++){
                int x,y;
                scanf("%d:%d",&x,&y);
                x%=12;
                x=x*60+y;
                a[i]=x;
            }
            for(int i=1;i<=n;i++){
                scanf("%s",s);
                int len=strlen(s);
                int k=0;
                if(s[0]=='+')k++;
                int x=0,y=0,id;
                for(int j=1;;j++){
                    if(s[j]==':'){
                        id=j;
                        break;
                    }
                    x=x*10+s[j]-48;
                }
                x%=12;
                for(int j=id+1;j<len;j++){
                    y=y*10+s[j]-48;
                }
                x=x*60+y;
                if(k){
                    b[i]=x;
                }
                else b[i]=-x;
            }
            int ans=0,t;
            sort(a+1,a+1+n);
            for(int i=0;i<=719;i++){
                for(int j=1;j<=n;j++){
                    d[j]=(i+b[j]+mod)%mod;
                }
                sort(d+1,d+1+n);
                int flag=0;
                for(int j=1;j<=n;j++){
                    if(d[j]!=a[j]){
                        flag=1;
                        break;
                    }
                }
                if(!flag){
                    ans++;
                    t=i;
                }
            }
            printf("%d ",kase);
            if(ans>1)printf("%d
    ",ans);
            else if(ans==0)printf("none
    ");
            else{
                int x=t/60,y=t%60;
                if(x==0)printf("12:%02d
    ",y);
                else printf("%d:%02d
    ",x,y);
            }
        }
    }

    G

    这题不会写,看网友大佬题解看懂的

    传送门:https://www.cnblogs.com/artoriax/p/10576496.html

  • 相关阅读:
    SaberRD之直流工作点分析
    SaberRD之瞬态分析
    Windows Form线程同步
    设计模式六大原则之一:单一职责原则
    利用异步通知I/O模型实现回声服务器端(windows)
    windows下线程同步【WaitForSingleObject、WaitForMultipleObjects、CRITICAL_SECTION(用户模式)、互斥量(内核模式)、信号量(内核模式)、事件对象(内核模式)】
    多线程并发回声服务器的实现(Linux版)
    基于Windows的服务器和客户端
    基于Linux的服务器和客户端
    OpenGL中怎么把世界坐标系变成屏幕坐标系
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/10585393.html
Copyright © 2011-2022 走看看