20::02训练题

ProblemA

三角形成立条件--模拟

#include<cstdio>
#include<cmath> 
#include<algorithm>
#include<iostream>
using namespace std;
int S=0,T=0,I=0;
void judge(int x,int y,int z){
    int ans=x+y;
    if(ans>z)
        {S++;}
    else if(ans==z){
        T++;
    } 
    else {
        I++;
    }
     
}
 
int main()
{    
    int a[4]={0};
    cin>>a[0]>>a[1]>>a[2]>>a[3];
    sort(a,a+4);
   
    judge(a[0],a[1],a[2]);
    judge(a[0],a[1],a[3]);
    judge(a[0],a[2],a[3]);
    judge(a[1],a[2],a[3]);

    if(S>0){
        cout<<"TRIANGLE"<<endl;
        return 0;
    }
    else if(T>0){
        cout<<"SEGMENT"<<endl;
        return 0;
    }
    else{
        cout<<"IMPOSSIBLE"<<endl;
        
    }
    return 0;
 } 

Problem B-DFS

#include<iostream>
#include<algorithm>
#include<string.h>

using namespace std;
const int N=101;
char s[N][N];
int n,m,ans;
char p;
int vis[N];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
void dfs(int x,int y) {
    for(int k=0;k<4;k++) { 
        int tx=x+dx[k];
        int ty=y+dy[k];
        if(tx<0||tx>=n||ty<0||ty>=m)
            continue;
        if(s[tx][ty]!='.') { 
            if(s[tx][ty]!=p) {
                vis[s[tx][ty]-'A'+1]=1;
                s[tx][ty]='.';
            }else {
                s[tx][ty]='.';
                dfs(tx,ty); 
            }
        }
    }
}
int main() {
    memset(vis,0,sizeof(vis));
    scanf("%d %d %c",&n,&m,&p);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf(" %c",&s[i][j]); 
    for(int i=0;i<n;i++) {
        for(int j=0;j<m;j++) {
            if(s[i][j]==p) {
                dfs(i,j);
            }
        }
    }
    for(int i=1;i<=26;i++)
        if(vis[i])
            ans++;
    cout<<ans<<endl;
    return 0;
}

ProblemsC

贪心法

#include<iostream>
#include<algorithm>
#include<string.h>

using namespace std;
const int N=101;
char s[N][N];
int n,m,ans;
char p;
int vis[N];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
void dfs(int x,int y) {
    for(int k=0;k<4;k++) { 
        int tx=x+dx[k];
        int ty=y+dy[k];
        if(tx<0||tx>=n||ty<0||ty>=m)
            continue;
        if(s[tx][ty]!='.') { 
            if(s[tx][ty]!=p) {
                vis[s[tx][ty]-'A'+1]=1;
                s[tx][ty]='.';
            }else {
                s[tx][ty]='.';
                dfs(tx,ty); 
            }
        }
    }
}
int main() {
    memset(vis,0,sizeof(vis));
    scanf("%d %d %c",&n,&m,&p);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf(" %c",&s[i][j]); 
    for(int i=0;i<n;i++) {
        for(int j=0;j<m;j++) {
            if(s[i][j]==p) {
                dfs(i,j);
            }
        }
    }
    for(int i=1;i<=26;i++)
        if(vis[i])
            ans++;
    cout<<ans<<endl;
    return 0;
}

 

posted @ 2020-09-23 15:50  Icarus0320  阅读(111)  评论(0编辑  收藏  举报