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;
}

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。