Icebound

icebound-area

第一次Codeforces全纪实【雾】

一直想打CF 但是一直没什么时间。。
不过这次模拟赛被JL的众神犇虐了之后,考虑到提高比赛能力的重要性 拉上TZG和YJZ去打了CF(DIV1 2333
当然结果是TZG排名全球70 rating暴涨 我只A了一道题==
原因是这样的:

A题:脑筋急转弯?给出几种面值的钞票,可以无限使用。求最小的不能凑成的面值,无解输出-1
最小的肯定是1啦!简直脑筋急转弯

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int s=0x3f3f3f3f;
int n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int a;
		scanf("%d",&a);s=min(s,a);
	}
	if(s==1)puts("-1");
	else puts("1");
	return 0;
}

B题 给出一个画框 往画框里放两幅画,画可以旋转,不过不能斜着放。求是否能放下。。
直接枚举怎么旋转 可是我中途打错了变量名== 于是QAQ。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int a[5],b[5];
int main()
{
	scanf("%d%d%d%d%d%d",&a[1],&b[1],&a[2],&b[2],&a[3],&b[3]);
	if(a[1]>b[1])swap(a[1],b[1]);
	if(a[2]>b[2])swap(a[2],b[2]);
	if(a[3]>b[3])swap(a[3],b[3]);
 
	if(a[1]*b[1]<a[2]*b[2]+a[3]*b[3]){puts("NO");return 0;}
 
	if(a[1]>=a[2]+b[3]&&b[1]>=b[2]+a[3]){puts("YES");return 0;}
	if(a[1]>=a[2]+a[3]&&b[1]>=b[2]+b[3]){puts("YES");return 0;}
	if(a[1]>=b[2]+b[3]&&b[1]>=a[2]+a[3]){puts("YES");return 0;}
	if(a[1]>=b[2]+a[3]&&b[1]>=a[2]+b[3]){puts("YES");return 0;}
 
	if(a[1]>=a[2]+b[3]&&b[1]>=b[2]&&b[1]>=a[3]){puts("YES");return 0;}//b[2] a[3]
	if(a[1]>=a[2]+a[3]&&b[1]>=b[2]&&b[1]>=b[3]){puts("YES");return 0;}
	if(a[1]>=b[2]+b[3]&&b[1]>=a[2]&&b[1]>=a[3]){puts("YES");return 0;}
	if(a[1]>=b[2]+a[3]&&b[1]>=a[2]&&b[1]>=b[3]){puts("YES");return 0;}
 
	if(b[1]>=a[2]+b[3]&&a[1]>=b[2]&&a[1]>=a[3]){puts("YES");return 0;}//b[2] a[3]
	if(b[1]>=a[2]+a[3]&&a[1]>=b[2]&&a[1]>=b[3]){puts("YES");return 0;}
	if(b[1]>=b[2]+b[3]&&a[1]>=a[2]&&a[1]>=a[3]){puts("YES");return 0;}
	if(b[1]>=b[2]+a[3]&&a[1]>=a[2]&&a[1]>=b[3]){puts("YES");return 0;}
	puts("NO");
}

C题 给出一个六边形 求这个六边形中有多少个边长为1的正三角形
如图:
如图

QAQ我在这里卡题了,一直在想六边形的每条边与三角形的关系。。。然后想了一个半小时 挂在这里了。。。
事实上只需要随便求出六边形面积(也可以叉积),然后除以每个三角形的面积就行了。。。
也可以推出面积公式。。。。六边形看成大三角形减去几个角来做。。
真是智商捉急啊!!(TZG 5min作出此题)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int a[10];
double s=sqrt(3)/4;
int main()
{
    for(int i=1;i<=6;i++)scanf("%d",&a[i]);
    cout<<(a[1]+a[2]+a[3])*(a[1]+a[2]+a[3])-a[1]*a[1]-a[3]*a[3]-a[5]*a[5]<<endl;
}

D题 给出两个字符串 两个字符串相等的条件是:
1他们字符相同
或者
2从中间把他们分成两半 两两相等
特别的 字符串长度为奇数时只能用1条件
这个条件是递归定义的。。。
于是TM递归下去就好啦!!!不用回溯直接NLOGN啊!!!!
TM这题比C题简单。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s1[900005],s2[900005];
bool force(int l1,int r1,int l2,int r2)
{
    for(int i=l1,j=l2;i<=r1;i++,j++)
    if(s1[i]!=s2[j])return 0;
    return 1;
}
bool dfs(int l1,int r1,int l2,int r2)
{
    if((r1-l1+1)%2)return force(l1,r1,l2,r2);
    if(force(l1,r1,l2,r2))return 1;
    int m1=(l1+r1)/2,m2=(l2+r2)/2;
    if(dfs(l1,m1,l2,m2)&&dfs(m1+1,r1,m2+1,r2))return 1;
    if(dfs(l1,m1,m2+1,r2)&&dfs(m1+1,r1,l2,m2))return 1;
    return 0;
}
int main()
{
    scanf("%s%s",s1+1,s2+1);
    int len1=strlen(s1+1);
    if(dfs(1,len1,1,len1))puts("YES");
    else puts("NO");
}

E题?没太看懂题。。好像是个经典问题
给出一个矩阵,上面有坏点 求不经过坏点从0,0到n,n的方案数?
反正也没写==写的话用组合数取MOD lucas 什么的乱搞就行

于是就这样-80rating
自己还是太弱。。。
下次再来吧。。

别人太强,自己也要变强啊!!!

  1. Lensual说道:

    来来来,打CF,用火麒麟上=w=(2333

  2. Leilani说道:

    Appredciation to my father wwho told me abot this website, this
    blog is actually awesome.

  3. Dick说道:

    Alternating side to side, tighten the bolts and nuts
    (using the screwdriver and adjustable wrench) until the gaskets look
    like they’re seated.

    1. icebound说道:

      2333这个人叫 dick