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的整数倍的点上分布着灯笼,而在 ...
 
随机推荐
- nodejs框架express实现登录
			
目录: 访问视图 Post请求 Post请求 - body(1) Post请求 - body(2) Post登陆1 Post登陆2 页面访问控制1 页面访问控制2 访问视图 前面我们已经添加了视图模板 ...
 - 曲线提取数据Engauge Digitizer
			
可导出CSV格式数据 其它参考: http://blog.sina.com.cn/s/blog_4ae65b4d0100z8cg.html 其它曲线提取数据的软件还有: GetData.Windig ...
 - Git入门教程
			
参考文献: 1. Pro Git 2. Git教程 3. Git教程 4. 图解Git
 - VM arguments
			
VM arguments -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m
 - noi 1944 吃糖果
			
题目链接:http://noi.openjudge.cn/ch0206/1944/ 根据第一天吃的个数递推,发现这个递推关系很像斐波那契数列. http://paste.ubuntu.com/2340 ...
 - php黑魔法之解析问题
			
code如下: <?php $a=$_GET[a]; $b=is_file($a); var_dump($b); ?> 可以看到1.ph< 返回了true 这样不就可以绕过这个的过滤 ...
 - redis参数与持久化原理
			
[root@JR hx]# redis-cli info # Server redis_version:2.8.19 redis_git_sha1:00000000 redis_git_dirty:0 ...
 - powerdesinger中建立一个表后,出现Existence of index的警告
			
可以不检查 Existence of index 这项,也就没有这个警告错误了!意思是说没有给表建立索引,而一个表一般至少要有一个索引,这是一个警告,不用的话对执行没有影响~ 转载:http://bl ...
 - 深入浅出设计模式——工厂方法模式(Factory Method)
			
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
 - js蛋疼的Class(获取class对象)
			
之前处理class对象被迫用jquery,以为JavaScript不支持class.确实百度某些大神也说js不待见class对象,就这样本菜放弃了原生js. 今天偶然发现一片文章吐槽jquery拥抱J ...