CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation。这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了手速与精准的竞争……(遗憾,如果参加了一定可以上分的吧orz)

  A题:

  先判断起点和终点的距离是否被每次跳的距离整除,如果不整除就到不了。再检验跳跃过程中的落点是否均合法即可。

  

 #include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
typedef long long ll;
int k,n;
char a[];
void solve(int st,int en)
{
if((en-st)%k!=)
{
printf("NO\n");
return ;
}
int j;
for(j=st+k;j<en;j+=k)
{
if(a[j]=='#')
{
printf("NO\n");
return;
}
}
// if(j<en)
printf("YES\n"); }
int main()
{
int i,si,ei;
scanf("%d%d",&n,&k);
scanf("%s",a);
for(i=;i<n;i++)
{
if(a[i]=='G')
ei=i;
if(a[i]=='T')
si=i;
}
if(ei<si)
swap(ei,si);
solve(si,ei);
return ;
}

  B题:

  根据题意,只需要想清楚最佳分配方案。根据排序不等式,即可轻松找到最佳方案。将人排序后,让从大到小的前若干个人分到人数小的城市,接下来再若干人分到人数多的城市即可得到最大值。

  

 #include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
typedef long long ll;
ll n,a[],ren[],i,he1=,he2=;
double an=;
int main()
{ scanf("%I64d%I64d%I64d",&n,&a[],&a[]);
if(a[]>a[])
swap(a[],a[]);
for(i=;i<n;i++)
scanf("%I64d",&ren[i]);
sort(ren,ren+n);
for(i=n-;i>=n-a[];i--)
{
he1+=ren[i];
}
for(i=n-a[]-;i>=n-a[]-a[];i--)
{
he2+=ren[i];
}
an=(1.0*he1/a[])+(1.0*he2/a[]);
printf("%.8f\n",an);
return ;
}

  C题:

  观察比赛场次和人数的关系,以及比赛场次何时+1即可发现这题本质上是斐波那契数列。设人x时开始变为最多比赛q场,人y时开始变为最多比赛q+1场,则人(x+y)时,前x个人可以找到比赛q场的唯一到最后的选手,后y个人可以找到比赛(q+1)场后唯一到最后的选手,这两个人可以比赛,并且会得出胜者,如果后y人中的胜者获得胜利,就构造出了最多参加(q+2)场的情况。并且可以归纳证明这是最少的人数。于是就证明了本题斐波那契数列的本质。

  

 #include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
typedef long long ll;
ll n;
ll fi(ll x)
{
if(x==)
return ;
if(x==)
return ;
else {
ll x1,x2,tem,cnt;
cnt=;x1=;x2=;
while(x1<x)
{
tem=x1;
x1=x1+x2;
x2=tem;
cnt++;
}
if(x1==x)
return cnt;
else
return cnt-;
}
}
int main()
{
scanf("%I64d",&n);
printf("%I64d\n",fi(n));
return ;
}

  D题:

  乍一看和素数相关,数还特别大,比较吓人。而实际上利用哥德巴赫猜想的内容即可轻松解决(虽然还没有证明为真,但这样数量级的数之前都已经用计算机验证过了)

  注意到:任何一个大于2的偶数都是两个素数之和。那么对于输入的如果是偶数,2就输出1(因为本身是质数),其余就输出2(根据猜想,可以分为两个质数之和)

      任何大于5的奇数都是三个素数之和。那么对于输入的如果是奇数,判断是否为质数(这里我比较懒,直接用了拉宾米勒,实际上简单的从2到根号n循环一遍就可以),是就输出1,不是的话再看(n-2)是否为质数,如果是,就可以将其分为2和(n-2)这样两个质数,那么就输出2。不然就只能根据猜想,一定可以分为3个质数,输出3。

  

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std; //****************************************************************
// Miller_Rabin 算法进行素数测试
//速度快,而且可以判断 <2^63的数
//****************************************************************
const int S=;//随机算法判定次数,S越大,判错概率越小 //计算 (a*b)%c. a,b都是long long的数,直接相乘可能溢出的
// a,b,c <2^63
long long mult_mod(long long a,long long b,long long c)
{
a%=c;
b%=c;
long long ret=;
while(b)
{
if(b&){ret+=a;ret%=c;}
a<<=;
if(a>=c)a%=c;
b>>=;
}
return ret;
} //计算 x^n %c
long long pow_mod(long long x,long long n,long long mod)//x^n%c
{
if(n==)return x%mod;
x%=mod;
long long tmp=x;
long long ret=;
while(n)
{
if(n&) ret=mult_mod(ret,tmp,mod);
tmp=mult_mod(tmp,tmp,mod);
n>>=;
}
return ret;
} //以a为基,n-1=x*2^t a^(n-1)=1(mod n) 验证n是不是合数
//一定是合数返回true,不一定返回false
bool check(long long a,long long n,long long x,long long t)
{
long long ret=pow_mod(a,x,n);
long long last=ret;
for(int i=;i<=t;i++)
{
ret=mult_mod(ret,ret,n);
if(ret==&&last!=&&last!=n-) return true;//合数
last=ret;
}
if(ret!=) return true;
return false;
} // Miller_Rabin()算法素数判定
//是素数返回true.(可能是伪素数,但概率极小)
//合数返回false; bool Miller_Rabin(long long n)
{
if(n<)return false;
if(n==)return true;
if((n&)==) return false;//偶数
long long x=n-;
long long t=;
while((x&)==){x>>=;t++;}
for(int i=;i<S;i++)
{
long long a=rand()%(n-)+;//rand()需要stdlib.h头文件
if(check(a,n,x,t))
return false;//合数
}
return true;
}
typedef long long ll;
ll n;
int main()
{
scanf("%I64d",&n);
if(n==)
{printf("1\n");return ;}
if(n%==)
printf("2\n");
else
{
if(Miller_Rabin(n))
{
printf("1\n"); }
else
{
if(Miller_Rabin(n-))
printf("2\n");
else
printf("3\n");
} }
return ;
}

  E题好难,貌似还得用到树状dp,还没有学到orz,等以后再回来填坑。(捂脸,估计看解题报告的大家其实想看的就是E题吧……)

Codeforces Round #382 (Div. 2) 解题报告的更多相关文章

  1. Codeforces Round #324 (Div. 2)解题报告

    ---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...

  2. Codeforces Round #380 (Div. 2) 解题报告

    第一次全程参加的CF比赛(虽然过了D题之后就开始干别的去了),人生第一次codeforces上分--(或许之前的比赛如果都参加全程也不会那么惨吧),终于回到了specialist的行列,感动~.虽然最 ...

  3. Codeforces Round #216 (Div. 2)解题报告

    又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<];    ,m2=;    ;i ...

  4. Codeforces Round #281 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/493 A题 写完后就交了,然后WA了,又读了一遍题,没找出错误后就开始搞B题了,后来回头重做的时候才发现,球员被红牌罚下场后还可 ...

  5. Codeforces Round #277 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...

  6. Codeforces Round #276 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...

  7. Codeforces Round #350 (Div. 2)解题报告

    codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...

  8. Codeforces Round #479 (Div. 3)解题报告

    题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...

  9. Codeforces Round #515 (Div. 3) 解题报告(A~E)

    题目链接:http://codeforces.com/contest/1066 1066 A. Vova and Train 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在 ...

随机推荐

  1. AppleWatch___学习笔记(一)开发思路和框架

    一.开发须知 如果你没有开发过 iphone,直接来做watch,我建议你不要这么做,不是不可以,而是目前所有的第三方应用都必须基于iphone的扩展,原生的watch应用,苹果目前还没有开放给开发者 ...

  2. spring IOC 容器中 Bean 的生命周期

    IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...

  3. php curl的使用

    我们来采集一个页面,通常情况下,我们会使用file_get_contents()函数来获取: <?php $str = file_get_contents('http://www.baidu.c ...

  4. Football Foundation (FOFO) TOJ 2556

    The football foundation (FOFO) has been researching on soccer; they created a set of sensors to desc ...

  5. MYSQL #1064错误

    你的给出的代码里option为MYSQL关键字,不能直接写,需要用`包括起来(它为数字键1左边的键上的字符),为: `option` varchar(50) NOT NULL default ''

  6. a标签样式

    .a{            cursor:pointer;            color: blue;            text-decoration:none;        }

  7. 图片上传本地预览。兼容IE7+

    基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 预览地址:http://www.jinbanmen.com/test/1.html js代码:/**名称 ...

  8. C++string中有关大小和容量的函数浅析

    1.length()与size() length是因为沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符 ...

  9. Displaying Window In Center In Oracle Forms 6i

    Center window automatically  in Oracle Forms 6i, use the following procedure by passing window name ...

  10. eclipse https git

    open preferences via application menu Window => Preferences (or on OSX Eclipse => Settings). N ...