FJUTOJ-周赛2016-12-16
注:fjutoj基本每周都有一次周赛,欢迎大家都来参加!
网址:http://59.77.139.92/index.jsp
A题:来源 POJ 2773
题意:给两个数m和k,问第k 个和m 互素的数是多少(从1到无穷大)。
思路:
二分 + 容斥
先求出m 的素因子p[],数x 和m 互素就意味着x 不存在p 数组中的任意一个素因子,现在要 求n 下面不存在p[]素因子的数的数量可以转化为,n-存在p[]中任意一个素因子的数的个数(经典题型,用容斥可以求),现在二分(k,INF)可以求出答案。
#include<stdio.h>
#define N 1000010
#define LL long long
const LL INF = 0x7fffffffffffffff;
bool pri[N];
int prim[N], po=;
void Init()
{
for(int i=;i<N;i++)
{
if(!pri[i]) prim[po++]=i;
for(int j=;j<po&&(LL)i*prim[j]<N;j++)
{
pri[i*prim[j]]=;
if(i%prim[j]==) break;
}
}
} int data[], co; void fun(int x)
{
int i=;
co=;
while(i<po && (LL)prim[i]*prim[i]<=x)
{
bool c=;
while(x%prim[i]==)
{
c=;
x/=prim[i];
}
if(c) data[co++]=prim[i];
i++;
}
if(x!=) data[co++]=x;
} void dfs(int limit, int j, LL y, LL now, LL &all)
{
if(limit==)
{
all += y/now;
return ;
}
for(int i=j; i<co; i++)
{
dfs(limit-, i+, y, now*data[i], all);
}
}
LL solve(LL x)
{
LL sum=x, flag=-;
for(int i=; i<=co; i++)
{
LL all=;
dfs(i, , x, , all);
sum+=flag*all;
flag *= -;
}
return sum;
} LL er(LL l, LL r, LL x)
{
while(l<r)
{
LL mid = (l+r)/;
if(solve(mid)>=x) r=mid;
else l=mid+;
}
return l;
} int main()
{
Init();
int x,y;
while(~scanf("%d%d",&x, &y))
{
fun(x);
printf("%lld\n", er(y, INF, y));
}
return ;
}
AC代码
B题:来源 HDU 1730
题意:
思路:
博弈
很容易产生的错误判断:如果两个子相邻,那么这个的胜者是后手,如果不相邻,胜者是先手,那么判断先手胜利的行数,最后如果是奇数则先手胜,偶数则后手胜(我因此WA了两次...)。举个错误样例:,如果按上面思路,两行都是先手胜,那么应该是后手赢,但先手其实可以将第一行的红点移动一格,这样先手就赢了。
事实上,这里应该是nim博弈的模型,首先,我们可以判断出一点,双方的棋子只会不断接近(如果一人后退一步,另一人可以跟进一步,保持局面不变)。接着,既然两者只能接近,那么就可以看作是n 堆,每一堆x个,每个玩家每轮可以拿走一个、两个、...直至拿完。接下来就不解释了。
#include<stdio.h>
int max(int a, int b) { return a>b?a:b; }
int main()
{
int n, m, x, y;
while(~scanf("%d%d",&n, &m))
{
int ans = ;
for(int i=; i<n; i++)
{
scanf("%d%d",&x, &y);
if(x+==y || x==y+);
else ans ^= ( max(x, y) - (x+y-max(x, y)) - );
}
if(ans) printf("I WIN!\n");
else printf("BAD LUCK!\n");
}
return ;
}
AC代码
C题:来源 POJ 3671
题意:
思路:
用两个数组a[]、b[],a[i]表示i前面2的个数,b[i]表示i后面1的个数(遍历两遍可以求出a、b数组),如果以i 为中心(1、2转折点),要修改的数个数为a[i-1]+b[i+1],遍历一遍求出最小值即可。
#include<stdio.h>
#define N 30010
int a[N], b[N], c[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
a[]=;
for(int i=; i<=n; i++)
{
scanf("%d", &c[i]);
if(c[i]==) a[i]=a[i-];
else a[i]=a[i-]+;
}
b[n+]=;
for(int i=n; i> ;i--)
{
if(c[i]==) b[i]=b[i+]+;
else b[i]=b[i+];
}
int mint = N;
for(int i=; i<=n; i++)
{
if(a[i-]+b[i+]<mint) mint = a[i-]+b[i+];
}
printf("%d\n", mint);
}
return ;
}
AC代码
D题:来源 POJ 3663
题意:
思路:
排序 + 二分
对数组排序后,遍历一遍,s-a[i]就是分界点,二分出小于等于他的第一个数,比他小的都满足条件。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; int a[];
int er(int l, int r, int x)
{
while(l<r)
{
int mid = (l+r)/;
if(a[mid]<=x) l=mid+;
else r=mid;
}
return l;
} int main()
{
int n, m;
while(~scanf("%d%d",&n,&m))
{
for(int i=; i<n; i++)
scanf("%d", &a[i]);
sort(a, a+n);
int ans = ;
for(int i=n-; i>; i--)
{
int x = m-a[i];
int num = er(, i, x) - ;
ans += num;
}
printf("%d\n", ans);
}
return ;
}
AC代码
E题:来源 POJ 1028
题意:
思路:
随手写个栈模拟一下就好了。
#include<stack>
#include<string>
#include<iostream>
using namespace std; string st[];
int top=;
int mt=; void push(string s)
{
st[++top]=s; mt=top;
} void pop()
{
if(top==) cout<<"Ignored"<<endl;
else cout<<st[--top]<<endl;
} int main()
{
st[top]="http://www.acm.org/";
string s;
while(cin>>s)
{
if(s[]=='Q') break;
if(s[]=='V')
{
cin>>s; cout<<s<<endl;
push(s);
}
else if(s[]=='B') pop();
else if(top==mt) cout<<"Ignored"<<endl;
else cout<<st[++top]<<endl;
}
return ;
}
AC代码
FJUTOJ-周赛2016-12-16的更多相关文章
- mysql查询练习题-2016.12.16
>>>>>>>>>> 练习时间:2016.12.16 编辑时间:2016-12-20-->22:12:08 题: 涉及:多表查询.ex ...
- U3D笔记11:47 2016/11/30-15:15 2016/12/19
11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...
- 更新日志(建议升级到2016.12.17) && 更新程序的方法
更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...
- My latest news(--2016.12.31)
2016.12.31 前一天晚上看 “纪实新闻” ,白天看视频,晚上刷题,看电影<湄公河行动> 2016.12.30 18:36 昨天上午考完了本学期的最后一门课程,下午乒乓+值班,今天 ...
- 关于2016.12.12——T1的反思:凸包的意义与应用
2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...
- rhel 7.0 配置centos yum源(2016/12/8),成功!
1.首先查看redhat 7.0系统本身所安装的那些yum 软件包: rpm -qa | grep yum #列出所有已安装的yum包 2.删除这些包: rpm -e *.rpm --nodeps # ...
- Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),
Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...
- 【转载】webstorm11(注册,激活,破解,码,一起支持正版,最新可用)(2016.11.16更新)
很多人都发现 http://idea.lanyus.com/ 不能激活了 很多帖子说的 http://15.idea.lanyus.com/ 之类都用不了了 最近封的厉害仅作测试 选择 License ...
- 12.16 Daily Scrum
Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. 邓亚梅 美化搜索框UI. 美 ...
- Murano Weekly Meeting 2016.08.16
Meeting time: 2016.August.16 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: ...
随机推荐
- 【Android Studio安装部署系列】八、Android Studio主题皮肤更换
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio具有自己的主题皮肤,但是如果想要更换自己喜欢的主题皮肤,可以参考下面的步骤. 注意,更换主题皮肤,之前的 ...
- KnockOut绑定之Click绑定
example(click绑定) Click绑定对DOM元素添加一个函数,当DOM元素被点击的时候调用.在button,input 或者a标签中常用,但其实他适用于任何可见的DOM元素. 每当你点击b ...
- 如何让vue自定义组件可以包裹内容,并且渲染出来,以及组件的组合使用
当我们用vue一开始写项目时,按需求文档自定义了一个公用组件,这个组件很多地方都用到了,然后随着项目的推进,又有了新的需求要在里面加东西,但又不是所有的地方都要加 这时候我们想这样往里面塞内容↓ ...
- 浅谈SQL Server内部运行机制
对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL的哪些方面是他们的挑战 或者软肋呢? 那就是 ...
- 树莓派linux系统中显示隐藏文件的几种方法
一.如果直接使用可视化文件管理器 1.直接点击右键,直接选择“显示隐藏文件”选项. 2.快捷键 CTRL + H 二.在终端命令行模式下 可以使用ls命令的-a参数来显示隐藏的文件及文件夹. ls - ...
- Flutter 即学即用系列博客——03 在旧有项目引入 Flutter
前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...
- DSAPI 短域名服务
有时,需要将长域名转换为短域名,或是为了减少字符量,或是为了隐藏真实网址.在DSAPI中,集成了EPS-GS的短域名接口.该功能需要联接互联网,从EPS服务器获取. 代码 DSAPI.网络.短域名服务 ...
- DevOps实例
DevOps实例 ------------------------------------------------------------------ 今天先到这儿,希望对您DevOPS, 技术领导力 ...
- org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component
原因:jdk1.8和你所用框架(spring+springMVC+mybatis)中spring框架的版本有问题, 解决方法:更换jdk1.7或者1.6
- Ubuntu16.04下OpenCV调用笔记本摄像头
1,新建一个test.cpp文件,插入下列代码,保存 #include<opencv2/opencv.hpp> #include<iostream> using namespa ...