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