码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #313 (Div. 2)

时间:2018-05-20 15:21:27      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:分享   comm   转换   技术分享   algorithm   相等   模拟题   opened   algo   

B.http://codeforces.com/contest/560/problem/B

题意:有一个大矩形和两个小矩形,先将两个小矩形放在大矩形内,问哪个小矩形是否会有重叠。

分析:枚举所有情况即可。将两个小矩形分别放在大矩形的左上角和右下角(最优情况)。先看各自的长宽是否已经比大矩形的长宽要长,再看两个的组合后的长宽是否同时比大矩形要长

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 int x,y;
 7 
 8 bool judge(int x1,int y1,int x2,int y2)
 9 {
10     int x3,y3;
11     x3=x1+x2;
12     y3=y1+y2;
13     if ( x1>x || x2>x || y1>y || y2>y ) return false;
14     if ( x3>x && y3>y ) return false;
15     return true;
16 }
17 
18 int main()
19 {
20     int x1,y1,x2,y2,ans;
21     bool flag;
22     while ( scanf("%d%d%d%d%d%d",&x,&y,&x1,&y1,&x2,&y2)!=EOF )
23     {
24         flag=false;
25         if ( judge(x1,y1,x2,y2) ) flag=true;
26         if ( judge(y1,x1,x2,y2) ) flag=true;
27         if ( judge(x1,y1,y2,x2) ) flag=true;
28         if ( judge(y1,x1,y2,x2) ) flag=true;
29         if ( flag ) printf("YES\n");
30         else printf("NO\n");
31     }
32     return 0;
33 }
560B

 

C.http://codeforces.com/contest/560/problem/C

题意:有一个等角的六边形,每条边长已知,先求这个六边形能分成多少个边长为1的等边三角形

分析:最后的个数=六边形的面积/边长为1的等边三角形的面积,所以只要求出所给六边形的面积即可。直接分割比较难操作,所以考虑将六边形补成一个大的等边三角形,再减去三个小的等边三角形。具体是取任意的连续的三条边(我取的是前三条a[0],a[1],a[2]),将其展开成一条直线,最后所得的三角形是以a[0]+a[1]+a[2]为底的等边三角形。而减去的是分别以a[0],a[2],a[4]为底的等边三角形

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxn=6;
 7 int a[maxn];
 8 
 9 int main()
10 {
11     int ans,sum,i,j,k,A;
12     for ( i=0;i<maxn;i++ ) scanf("%d",&a[i]);
13     A=a[0]+a[1]+a[2];
14     ans=(A*A-a[0]*a[0]-a[2]*a[2]-a[4]*a[4]);
15     printf("%d\n",ans);
16     return 0;
17 } 
560C

 

D.http://codeforces.com/contest/560/problem/D

题意:给定两个字符串,让你判断两个字符串是不是相等的,相等的条件如下: 1.两个字符串相等 2.字符串a划分成长度相等的字符串a1,a2. 字符串b划分成长度相等的字符串b1,b2.当a1=b1,a2=b2或者a1=b2,a2=b1时相等 

分析:模拟题。按照题目要求的进行模拟即可,不过可以进行小小的转换,将两个字符串的比较转换成先将每个字符串本身按照规则根据字典序大小重新“排序”,比较两个字符串最后是否相同即可

将一个字符串分成两部分,需要用到string库中的substr函数,string a=s.substr(0,len/2),0表示起始位置,len/2表示长度。

技术分享图片
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
string split(string a)
{
    int len=a.size();
    if ( len%2==1 ) return a;
    string a1=a.substr(0,len/2),a2=a.substr(len/2,len/2);
    string b1=split(a1),b2=split(a2);
    return b1>b2?b2+b1:b1+b2;
}

int main()
{
    string a,b;
    cin>>a>>b;
    a=split(a),b=split(b);
    if ( a==b ) printf("YES\n");
    else printf("NO\n");
    return 0;
}
560D

 

Codeforces Round #313 (Div. 2)

标签:分享   comm   转换   技术分享   algorithm   相等   模拟题   opened   algo   

原文地址:https://www.cnblogs.com/HDUjackyan/p/9063289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!