AtCoder Beginner Contest 075 总结
2017-10-15 15:09
471 查看
题目不难,但是只做出了两道题。今天补题的时候发现全是暴力……= =
还是太菜了。:(
题目链接:点击打开链接
A
B
C 看到N的范围最大才50…可以暴力,DFS搜索,每次删除一条边看能不能访问到所有的点,
D
N最大是50 没错还是暴力,n^5的暴力……。不过要注意输出lld 和I64d的区别 传送门
#include <iostream>
#include <map>
#include <set>
#include <string>
#include<string.h>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
vector<long long> xray,yray;
int main(){
int n,k;
scanf("%d%d",&n,&k);
vector<long long> x(n),y(n);
for(int i=0;i<n;i++){
cin>>x[i]>>y[i];
xray.push_back(x[i]);
yray.push_back(y[i]);
}
sort(xray.begin(),xray.end());
sort(yray.begin(),yray.end());
ll ans=1LL*(xray[n-1]-xray[0])*(yray[n-1]-yray[0]);
for(int x1=0;x1<n;x1++){
for(int x2=x1+1;x2<n;x2++){
for(int y1=0;y1<n;y1++){
for(int y2=y1+1;y2<n;y2++){
ll lx=xray[x1],rx=xray[x2];
ll uy=yray[y2],dy=yray[y1];
int num=0;
for(int i=0;i<n;i++){
if(x[i]>=lx and x[i]<=rx&&y[i]<=uy&&y[i]>=dy){
num++;
}
}
if(num>=k) ans=min(ans,1LL*(rx-lx)*(uy-dy));
}
}
}
}
printf("%lld\n",ans);
// printf("%I64d\n",ans);
// cout<<ans<<endl;
return 0;
}
还是太菜了。:(
题目链接:点击打开链接
A
#include <iostream> #include <map> #include <set> #include <string> #include<string.h> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <queue> #include <vector> using namespace std; typedef long long ll; int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a==b) printf("%d\n",c); else if(a==c) printf("%d\n",b); else printf("%d\n",a); return 0; }
B
#include <iostream> #include <map> #include <set> #include <string> #include<string.h> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <queue> #include <vector> using namespace std; typedef long long ll; const int maxn=55; char mp[maxn][maxn]; int f[maxn][maxn]; int main(){ int h,w; scanf("%d%d",&h,&w); memset(f,0,sizeof(f)); for(int i=0;i<h;i++){ scanf("%s",mp[i]); } for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ if(mp[i][j]=='#'){ if(i-1>=0){ f[i-1][j]++; } if(j-1>=0){ f[i][j-1]++; } if(i+1<h){ f[i+1][j]++; } if(j+1<w){ f[i][j+1]++; } if(i-1>=0&&j-1>=0){ f[i-1][j-1]++; } if(i+1<h&&j-1>=0){ f[i+1][j-1]++; } if(i-1>=0&&j+1<w){ f[i-1][j+1]++; } if(i+1<h&&j+1<w){ f[i+1][j+1]++; } } } } for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ if(mp[i][j]=='#') printf("#"); else printf("%d",f[i][j]); }printf("\n"); } return 0; }
C 看到N的范围最大才50…可以暴力,DFS搜索,每次删除一条边看能不能访问到所有的点,
#include <iostream> #include <map> #include <set> #include <string> #include<string.h> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <queue> #include <vector> using namespace std; typedef long long ll; /* 官方题解*/ const int maxn=55; int n,m; int a[maxn],b[maxn]; bool graph[maxn][maxn]; bool vis[maxn]; void dfs(int v){ vis[v]=true; for(int v2=0;v2<n;++v2){ if(graph[v][v2]==false) continue; if(vis[v2]==true) continue; dfs(v2); } } int main(){ cin>>n>>m; for(int i=0;i<m;i++){ cin>>a[i]>>b[i]; a[i]--,b[i]--; graph[a[i]][b[i]]=graph[b[i]][a[i]]=true; } int ans=0; for(int i=0;i<m;i++){ graph[a[i]][b[i]]=graph[b[i]][a[i]]=false; for(int j=0;j<n;j++){ vis[j]=false; } dfs(0); bool bridge=false; for(int i=0;i<n;i++){ if(!vis[i]) bridge=true; } if(bridge) ans++; graph[a[i]][b[i]]=graph[b[i]][a[i]]=true; } cout<<ans<<endl; return 0; } //*/
D
N最大是50 没错还是暴力,n^5的暴力……。不过要注意输出lld 和I64d的区别 传送门
#include <iostream>
#include <map>
#include <set>
#include <string>
#include<string.h>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
vector<long long> xray,yray;
int main(){
int n,k;
scanf("%d%d",&n,&k);
vector<long long> x(n),y(n);
for(int i=0;i<n;i++){
cin>>x[i]>>y[i];
xray.push_back(x[i]);
yray.push_back(y[i]);
}
sort(xray.begin(),xray.end());
sort(yray.begin(),yray.end());
ll ans=1LL*(xray[n-1]-xray[0])*(yray[n-1]-yray[0]);
for(int x1=0;x1<n;x1++){
for(int x2=x1+1;x2<n;x2++){
for(int y1=0;y1<n;y1++){
for(int y2=y1+1;y2<n;y2++){
ll lx=xray[x1],rx=xray[x2];
ll uy=yray[y2],dy=yray[y1];
int num=0;
for(int i=0;i<n;i++){
if(x[i]>=lx and x[i]<=rx&&y[i]<=uy&&y[i]>=dy){
num++;
}
}
if(num>=k) ans=min(ans,1LL*(rx-lx)*(uy-dy));
}
}
}
}
printf("%lld\n",ans);
// printf("%I64d\n",ans);
// cout<<ans<<endl;
return 0;
}
相关文章推荐
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
- 赛后总结AtCoder Beginner Contest 090(Beginner)
- AtCoder Beginner Contest 075
- AtCoder Beginner Contest 083 D题
- AtCoder Beginner Contest 084 C题
- AtCoder Beginner Contest 063
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 081
- AtCoder Beginner Contest 085 最后一题
- AtCoder Tenka1 Programmer Beginner Contest 解题报告
- C - Shopping Street(AtCoder Beginner Contest 080)
- AtCoder Beginner Contest 059 C - Sequence(贪心)
- AtCoder Beginner Contest 070
- AtCoder Regular Contest 075
- AtCoder Regular Contest 075 2017年6月4日 C、D、E题解
- AtCoder AtCoder Beginner Contest 063 D - Widespread(二分)
- Atcoder Grand Contest 019 总结
- AtCoder Beginner Contest 087 - D People on a Line
- AtCoder Regular Contest 075 E - Meaningful Mean(树状数组)
- DP——AtCoder Beginner Contest 050 #D - Xor Sum