Codeforces Round #382 (Div. 2) 解题报告
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) 解题报告的更多相关文章
- Codeforces Round #324 (Div. 2)解题报告
---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...
- Codeforces Round #380 (Div. 2) 解题报告
第一次全程参加的CF比赛(虽然过了D题之后就开始干别的去了),人生第一次codeforces上分--(或许之前的比赛如果都参加全程也不会那么惨吧),终于回到了specialist的行列,感动~.虽然最 ...
- Codeforces Round #216 (Div. 2)解题报告
又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<]; ,m2=; ;i ...
- Codeforces Round #281 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/493 A题 写完后就交了,然后WA了,又读了一遍题,没找出错误后就开始搞B题了,后来回头重做的时候才发现,球员被红牌罚下场后还可 ...
- Codeforces Round #277 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...
- Codeforces Round #276 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...
- Codeforces Round #350 (Div. 2)解题报告
codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...
- Codeforces Round #479 (Div. 3)解题报告
题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...
- Codeforces Round #515 (Div. 3) 解题报告(A~E)
题目链接:http://codeforces.com/contest/1066 1066 A. Vova and Train 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在 ...
随机推荐
- AppleWatch___学习笔记(一)开发思路和框架
一.开发须知 如果你没有开发过 iphone,直接来做watch,我建议你不要这么做,不是不可以,而是目前所有的第三方应用都必须基于iphone的扩展,原生的watch应用,苹果目前还没有开放给开发者 ...
- spring IOC 容器中 Bean 的生命周期
IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...
- php curl的使用
我们来采集一个页面,通常情况下,我们会使用file_get_contents()函数来获取: <?php $str = file_get_contents('http://www.baidu.c ...
- Football Foundation (FOFO) TOJ 2556
The football foundation (FOFO) has been researching on soccer; they created a set of sensors to desc ...
- MYSQL #1064错误
你的给出的代码里option为MYSQL关键字,不能直接写,需要用`包括起来(它为数字键1左边的键上的字符),为: `option` varchar(50) NOT NULL default ''
- a标签样式
.a{ cursor:pointer; color: blue; text-decoration:none; }
- 图片上传本地预览。兼容IE7+
基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 预览地址:http://www.jinbanmen.com/test/1.html js代码:/**名称 ...
- C++string中有关大小和容量的函数浅析
1.length()与size() length是因为沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符 ...
- Displaying Window In Center In Oracle Forms 6i
Center window automatically in Oracle Forms 6i, use the following procedure by passing window name ...
- eclipse https git
open preferences via application menu Window => Preferences (or on OSX Eclipse => Settings). N ...