Codeforces Round #313 (Div. 2)
B.http://codeforces.com/contest/560/problem/B
題意:有一個大矩形和兩個小矩形,先將兩個小矩形放在大矩形內,問哪個小矩形是否會有重疊。
分析:枚舉所有情況即可。將兩個小矩形分別放在大矩形的左上角和右下角(最優情況)。先看各自的長寬是否已經比大矩形的長寬要長,再看兩個的組合後的長寬是否同時比大矩形要長
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6560Bint 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 }
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)