Problem 1 无聊的gcd(gcd.c/cpp/pas)

话说出题人不会被查水表吧。

简单的问题描述:从N个正整数里面取出K个数的最大公因数最大是多少。(请将答案乘上k之后输出哦,谢谢合作。)

输入格式

第一行两个正整数N,K。

第二行n个正整数

输出格式

输出一个正整数表示最大的最大公因数。

样例输入

3 1

1 2 3

样例输出

3

数据说明

对于30%的数据,保证k≤n≤20。

对于50%的数据,保证输入中所有数小于5000。

对于100%的数据,保证输入中所有数小于500000,k≤n。


0表示不取 1表示取

用i的二进制表示状态  比如i=10101表示取1,3,5    i=00110表示取3,4

然后for一遍,tmp表示i的二进制当中1的数量
如果1有k个
那么i代表的状态选了k个数

for一遍把i表示的状态取了的数的gcd取出来

最后统计ans
#include <cstdio>
#include<iostream>
using namespace std;
const int Maxn = ; int a[Maxn],n,k,ans=; int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
} int max(int a,int b)
{
return a < b ? b : a ;
} int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<n;++i)scanf("%d",&a[i]);//读入
for(int i=;i<(<<n);++i)
{
int tmp = ;
for(int j=;j<n;++j)
{
if(i&(<<j)) ++tmp;
//tmp表示选了几个数
}
// printf("i = %d : tmp = %d\n",i,tmp);
if(tmp==k)//如果选了k个
{
tmp=-;
for(int j=;j<n;++j)
{
if(i&(<<j))
{
if(tmp==-) tmp=a[j];
else tmp=gcd(a[j],tmp);
}
}
ans = max(ans,tmp);
// printf("ans : %d\n",ans);
}
}
printf("%d",ans*k);
puts("");
return ;
}

QAQ数论好烦啊

如果i&(1<<j) == 1的话那么i的第j位就是1

因为1<<j是...001000...的形式存在,所以和 i 与起来,要是 i 这一位是 1 , 就是1,i 这一位是0,就是0

所以 i&(1<<j) 表示 i 在二进制下的第 j 位

因为1<<0 = 1 这时候j=0 如果从1存的话就变成1<<1 = 2 那就时间复杂度*2 所以从0开始读


首先所有输入数字不大于50W,那么我们开一个50W的数组,记下每个数字出现多少次

然后就有一些有意思的事情发生了

我们从小到大枚举答案 每个答案x,判定可行的方法就是遍历每一个x的倍数

那么只要把所有x的倍数统计一下有多少看看是不是大于等于k就好了

如果我选的是这k个x的倍数,那么我们不就知道答案至少是x了


Problem 2 虫洞(wormhole.cpp/c/pas)

【题目描述】

John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地,并有W个虫洞(有向边)。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。

【输入格式】

* Line 1: 一个整数 F, 表示农场个数。

* Line 1 of each farm: 三个整数 N, M, W。

* Lines 2..M+1 of each farm: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条用时T秒的小路。

* Lines M+2..M+W+1 of each farm: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条可以使John到达T秒前的虫洞。

【输出格式】

* Lines 1..F: 如果John能在这个农场实现他的目标,输出"YES",否则输出"NO"。

【样例输入】

2

3 3 1

1 2 2

1 3 4

2 3 1

3 1 3

3 2 1

1 2 3

2 3 4

3 1 8

【样例输出】

NO

YES


1.一个点如果经过一个环以后dis一直在变小,那么显然这个环是负环
2.如果没有负环一个点最多进队n次(每条只想j的边都维护一遍dis)

所以vis记成int,int vis[Maxn];

while(!q.empty()) 

Problem 3 机器人(robot.cpp/c/pas)

【题目描述】

早苗入手了最新的Gundam模型。最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧。

早苗的新模型可以按照输入的命令进行移动,命令包括‘E’、‘S’、‘W’、‘N’四种,分别对应东南西北。执行某个命令时,它会向对应方向移动一个单位。作为新型机器人,它可以执行命令串。对于输入的命令串,每一秒它会按命令行动一次。执行完命令串的最后一个命令后,会自动从头开始循环。在0时刻时机器人位于(0,0)。求T秒后机器人所在位置坐标。

【输入格式】

第1行:一个字符串,表示早苗输入的命令串,保证至少有1个命令

第2行:一个正整数T

【输出格式】

2个整数,表示T秒时,机器人的坐标。

【样例输入】

NSWWNSNEEWN

12

【样例输出】

-1 3

【数据范围】

对于60%的数据 T<=500,000 且命令串长度<=5,000

对于100%的数据 T<=2,000,000,000 且命令串长度<=5,000

【注意】

向东移动,坐标改变改变为(X+1,Y);

向南移动,坐标改变改变为(X,Y-1);

向西移动,坐标改变改变为(X-1,Y);

向北移动,坐标改变改变为(X,Y+1);


由于t特别大然后操作序列最长只有5000

就先做一遍操作序列,看看做完一整个序列之后,x和y是变化量是多少,并记录这个变化量

用t除以长度,剩下的就是取模了就是t%长度  就知道要做到哪里了

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
char ch[];
int t,nn=;
int xx=,yy=;
int x=,y=;
int main()
{
scanf("%s%d",ch+,&t);
int n=strlen(ch+);
for(int i=;i<=n;++i)
{
if(ch[i]=='N')yy++;
if(ch[i]=='S')yy--;
if(ch[i]=='W')xx--;
if(ch[i]=='E')xx++;
}
nn=t/n;
t%=n;
for(int i=;i<=t;++i)
{
if(ch[i]=='N')y++;
if(ch[i]=='S')y--;
if(ch[i]=='W')x--;
if(ch[i]=='E')x++;
}
cout<<x+xx*nn<<" "<<y+yy*nn;
puts("");
return ;
}

模拟也要动脑子QAQ

套题T4的更多相关文章

  1. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  2. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  3. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  4. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  5. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  6. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  7. 套题 codeforces 360

    A题:Opponents 直接模拟 #include <bits/stdc++.h> using namespace std; ]; int main() { int n,k; while ...

  8. 套题 codeforces 359

    A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...

  9. 套题 bestcoder 84

    A题:Aaronson 静下心来观察就会发现1.如果m大于等于n的位数,那么n直接写成二进制形式就是最优解形式2.如果m小于n的位数,那么贪心地使得高位尽可能地多消掉n的值,因为高位少写一个数就意味着 ...

随机推荐

  1. js 倒计时 倒计时60秒

    <input type="button" id="btn" value="免费获取验证码" onclick="settime ...

  2. jeecms获取栏目标题图

    [@cms_channel id='1'] <img src="${tag_bean.titleImg!site.typeImg}" /> [/@cms_channel ...

  3. 【zendstudio】如何利用zendstudio新建 或导入php项目

    一.利用ZendStudio创建 PHP Project 1. 打开ZendStudio, 选择:File à New à PHP Project, 如下图所示: 于是弹出如下界面: 在”Projec ...

  4. [转]WPF 依赖项属性

    from:http://blog.csdn.net/datoumimi/article/details/8033682 ps:环境限制,发的东西一长就会被拦截,所以删了一部分 UI软件中经常会用到大量 ...

  5. Object.keys()

    Object.keys(obj),返回一个数组,数组里是该obj可被枚举的所有属性名.请看示例: 示例一: function Pasta(grain, width, shape) { this.gra ...

  6. 横轴墨卡托 (Transverse Mercator) 投影

    横轴墨卡托 (Transverse Mercator) 投影 描述 此投影又称为高斯-克吕格投影,它与墨卡托投影相似,不同之处在于圆柱是沿经线而非赤道纵向排列.通过这种方法生成的等角投影不会保持真实的 ...

  7. posix thread 浅谈

    用Posix thread进行多线程设计,就不怕跨平台了,因为很多OS都兼容Posix thread,如Linux/Windows等,甚至嵌入式系统上(如rt-thread)都支持posix thre ...

  8. mysql 连接语句

    在 SELECT 语句中,如果 FROM 子句引用了多个表源或视图,可以使用 JOIN 指示指定的联接操作应在指定的表源或视图之间执行. 一.交叉联接:CROSS JOIN 交叉联接将执行一个叉积(迪 ...

  9. Ubuntu系统下USB转串口的使用

    PC系统是Ubuntu12.04,与路由器开发板之间用USB转串口线连接. 一.硬件连接 确认Ubuntu对USB转串口设备的支持. 1.# lsmod | grep usbserial如果有usbs ...

  10. iOS10和Xcode8适配

    1 Xib文件的注意事项 使用Xcode8打开xib文件后,会出现下图的提示. 大家选择Choose Device即可. 之后大家会发现布局啊,frame乱了,只需要更新一下frame即可.如下图 注 ...