zoukankan      html  css  js  c++  java
  • 18清明假期汇总

    • CF_div2ABC

    A - Flag

      判断输入矩阵是否满足 每行元素相同,相邻行之间元素不同

    #include <iostream>
    
    using namespace std;
    
    int main(){
        int n,m;
        char num[105][105];
        int ok;
        cin>>n>>m;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                cin>>num[i][j];
                
        ok=1;                              
        for(int j=0;j<m-1;j++){               
            if(num[0][j]!=num[0][j+1]) ok=0;
        }                                     
        for(int i=1;i<n;i++){
            if(ok==0) break;
            if(num[i][0]==num[i-1][0]){ok=0;break;}
            for(int j=1;j<m;j++){
                if(num[i][j]==num[i-1][j]||num[i][j]!=num[i][j-1]){
                    ok=0;
                    break;
                }
            }
        }                                       
        if(ok==1) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }                 
    Flag

    B - Burglar and Matches

      给定背包容量、大小相同的火柴盒数量及每个火柴盒中火柴数量,求在不拆开火柴盒的情况下最多能拿到的火柴数量

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    struct node{
        int a,b;
    }c[25];
    bool cmp(struct node x,struct node y){
        return x.b>y.b;
    }
    long long n;    
    int m;
    int main(){
        cin>>n>>m;
        for(int i=0;i<m;i++){
            cin>>c[i].a>>c[i].b;
        }    
        sort(c,c+m,cmp);
        
        long long num,ans;
        num=0;ans=0;
        for(int i=0;i<m;i++){      
            if(num+c[i].a<=n){
                ans=ans+c[i].b*c[i].a;
                num=num+c[i].a;
            }
            else{
                ans=ans+c[i].b*(n-num);
                break;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    Burglar and Matches

    C - Monitor

      调整长宽,s.t.长宽符合要求比例且面积最大

      注:输入数据中的要求比例不一定是互素的,要加一个初步处理

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int gcd(int u,int v){
        return v?gcd(v,u%v):u;
    } 
    int main(){
        long long a,b,x,y;
        cin>>a>>b>>x>>y;
        long long t,ax,by;
        t=gcd(x,y);
        x=x/t;
        y=y/t;
        
        ax=a/x;
        by=b/y;
        if(ax&&by){
            t=min(ax,by);
            cout<<t*x<<" "<<t*y<<endl;
        }
        else cout<<0<<" "<<0<<endl;
    }
    Monitor

    D - Triangle

      给定三角形三个角的坐标(均为int)判断该三角形是否是直角三角形(RIGHT),或者将一个点的位置移动一个单位长度后是否为直角三角形(ALMOST),两者都不满足(NEITHER)

    #include <iostream>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    
    int dx[]={1,-1,0,0},dy[]={0,0,-1,1};
    int ok=0;
    struct node{
        int x,y;
    }point[5];
    
    int triangle(node a1,node a2,node a3){
        int d[3];         
        node a[3];          
        a[0]=a1;a[1]=a2;a[2]=a3;
        int j=1;
        for(int i=0;i<3;i++){ 
            j=(j+1)%3;        
            d[i]=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);                
        }    
        sort(d,d+3);          
        if(d[0]!=0&&d[0]+d[1]==d[2]){    
                return 1;
        }
        return 0;
    }
    
    int main(){
        cin>>point[0].x>>point[0].y
            >>point[1].x>>point[1].y
            >>point[2].x>>point[2].y;
        if(triangle(point[0],point[1],point[2])){
            cout<<"RIGHT"<<endl;
        }
        else{   
            int k,l;
            k=1;l=2;
            for(int i=0;i<3;i++){
                for(int j=0;j<4;j++){
                    node t;
                    t.x=point[i].x+dx[j];
                    t.y=point[i].y+dy[j];
                          
                    if(triangle(t,point[k],point[l])){
                        ok=1;
                        break;
                    }      
                }  
                k=(k+1)%3;           
                l=(l+1)%3;  
                if(ok==1) break;
            }
            if(ok==1) cout<<"ALMOST"<<endl;
            else cout<<"NEITHER"<<endl; 
        }
        return 0;
    } 
    Triangle

    E - Platforms

      In one one-dimensional world there are n platforms. Platform with index k (platforms are numbered from 1) is a segment with coordinates [(k - 1)m, (k - 1)m + l], and l < m. Grasshopper Bob starts to jump along the platforms from point 0, with each jump he moves exactly d units right. Find out the coordinate of the point, where Bob will fall down. The grasshopper falls down, if he finds himself not on the platform, but if he finds himself on the edge of the platform, he doesn't fall down.

      输入n,d,m,l,输出掉落位置

    #include <iostream>
    
    using namespace std;
    
    long long n,d,m,l;
     
    int main(){
        cin>>n>>d>>m>>l;
        for(long long i=0;i<n;i++){
            long long le=i*m+l;
            long long ri=(i+1)*m;
            long long t;      
            t=le-le%d+d;     
            if(t<ri){        
                cout<<t<<endl;
                break;
            }
            else if(i==n-1){   
                cout<<ri-(ri-1)%d+d-1<<endl;
            }
        }
        return 0;
    }
    Platforms
    • 清明节小礼物

    A - New Year Transportation

      n个单元格线性排列,单元格间不能直接通行,第 i 个单元格有一个单向传送门可传送至 i+ai ,问从第一个单元格是否能到达第 t 个单元格

    #include<iostream>
    
    using namespace std;
    
    int n,t,a[30005];
    int ok;
    
    int main(){
        cin>>n>>t;
        for(int i=1;i<n;i++){
            cin>>a[i];
        }
        
        ok=0;
        for(int i=1;i<=n;){
            if(i>t) break;
            if(i==t){
                ok=1;
                break;
            }
            i=i+a[i];
        }
        if(ok) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        return 0;
    }
    New Year Transportation

    B - Strongly Connected City

      n条水平公路和m条垂直公路,每条公路均是单向的,问是某公路上的每个点是否是互通的

      注:只要外圈点构成环路,公路上每个点均能到达外圈的点并通过外圈环路到达任意点,即每个点是互通的

    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    int n,m;
    char ch[2][25];
    
    int main(){
        cin>>n>>m;
        for(int i=0;i<2;i++){
            cin>>ch[i];
        }
        int ok=0;
        if(ch[0][0]=='>'){
            if(ch[0][n-1]=='<'&&ch[1][0]=='^'&&ch[1][m-1]=='v'){
                ok=1;
            }
        }
        if(ch[1][0]=='v'){
            if(ch[1][m-1]=='^'&&ch[0][0]=='<'&&ch[0][n-1]=='>')
                ok=1;
        }
        
        if(ok) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    Strongly Connected City
  • 相关阅读:
    iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频
    MyBatis之TypeHandler用法
    视频监控安防专网事件预警运维系统开发方案
    Qmgo 开源了! 更好用的 Go 语言 MongoDB driver
    前端使用axios传递数组后端使用List接收
    jdk1.6手册java8中英手册java9英文手册.chm(下载)
    自动化运维工具Ansible (一)
    初级模拟电路:4-11 混合π模型
    简单体验一个高性能,简单,轻量的ORM库- Dapper (无依赖其它库,非常方便高效)
    Python计算大文件行数方法及性能比较
  • 原文地址:https://www.cnblogs.com/anonym/p/8723485.html
Copyright © 2011-2022 走看看