ural 1091 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1091

题意是从1到n的集合里选出k个数,使得这些数满足gcd大于1

解法:

因子有2的数: 2,4,6,8,10,12,14.。。

因子有3的数:3,6,9,12,15,18,21.。。

因子有5的数:5,10,15,18,21,24.。。

可以看出这里求出的集合时会有重复的,得去从。可惜没有学过容斥原理。不过解决这题还是没问题的。

50以内的素因子有:2, 3, 5, 7, 11, 13, 17, 19, 23只有这些素因子才可能产生集合元素大于2的集合

排除重复度为2的集合: 6{2,3(因子2和因子3造成集合重复)}, 10{2,5},14{2,7}, 22{2, 11}, 15{3,5},21{3,7}

代码为:

IN = lambda : map(int, raw_input().split() )
prime = [2, 3, 5, 7, 11, 13, 17, 19, 23]
x = [6, 10, 14, 22, 15, 21] k, s = IN()
c =[ [0]*(s+1) for i in xrange(s+1) ]
for i in xrange(s+1):
c[i][1] = i; c[i][0] = 1; c[i][i]=1
for i in xrange(1,s+1):
for j in xrange(1, i):
c[i][j] = c[i-1][j]+c[i-1][j-1] sum = 0
for v in prime:
if s/v<k: break
sum += c[s/v][k]
for v in x:
if s/v<k: break
sum -= c[s/v][k] print sum if sum<10000 else 10000

cf 295B http://codeforces.com/problemset/problem/295/B

题意是:按照一定顺序删除点并删除与点相连的线,求删除该点前的点集合里两两点的最短距离。

这题我以前看到过类似的,很自然就想到了从后往前处理,每次把这个点加进去循环更新距离,这个类似floyed

python代码:肯能是python效率问题吧,这个代码过不了。TLE,但是换成c++就过了

from sys import stdin,stdout
IN = lambda: [ int(x) for x in stdin.readline().split() ]
n = int( stdin.readline().strip() )
edge = []
for i in xrange(n):
edge.append( IN() )
x = IN()
ans = [0]*n for k in xrange(n-1, -1, -1):
for i in xrange(n):
for j in xrange(n):
edge[i][j] = min( edge[i][j], edge[i][x[k] -1] + edge[x[k]-1 ][j] )
for i in xrange(k, n):
for j in xrange(k, n):
ans[k] += edge[x[i]-1 ][x[j]-1 ]
print ' '.join( map(str,ans ) )

c++ code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define maxn 505
int n, edge[maxn][maxn];
int x[maxn];
long long ans[maxn]; int main(int argc, char**argv){
cin >> n;
for ( int i=; i<n; ++i )
for ( int j=; j<n; ++j )
cin >> edge[i][j];
for ( int i=; i<n; ++i ) cin >>x[i];
for ( int k=n-; k>=; --k ){
for ( int i=; i<n; ++i )
for ( int j=; j<n; ++j )
edge[i][j] = min( edge[i][j], edge[i][x[k]- ]+ edge[x[k]-][j] );
ans[k] = ;
for ( int i=k; i<n; ++i )
for ( int j=i+; j<n; ++j )
ans[k] += edge[x[i]- ][x[j]- ]+edge[x[j]- ][x[i]- ];
}
for ( int i=; i<n; ++i )
printf("%I64d ", ans[i]);
}

ural 1091. Tmutarakan Exams 和 codeforces 295 B. Greg and Graph的更多相关文章

  1. ural 1091. Tmutarakan Exams(容斥原理)

    1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...

  2. Ural 1091 Tmutarakan Exams

    Tmutarakan Exams Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...

  3. Codeforces 295 B. Greg and Graph

    http://codeforces.com/problemset/problem/295/B 题意: 给定一个有边权的有向图.再给定一个1~n的排列. 按排列中的顺序依次删除点,问每次删除后,所有点对 ...

  4. ural 1091. Tmutarakan Exams(容斥)

    http://acm.timus.ru/problem.aspx? space=1&num=1091 从1~s中选出k个数,使得k个数的最大公约数大于1,问这种取法有多少种. (2<=k ...

  5. URAL - 1091 Tmutarakan Exams (简单容斥原理)

    题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1.求这样的数的个数 分析:从2开始枚举gcd,但这样会发生重复.譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就 ...

  6. 1091. Tmutarakan Exams

    1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...

  7. 容斥原理--计算并集的元素个数 URAL 1091

    在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...

  8. F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数

    F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 的 ...

  9. 2014 Super Training #3 H Tmutarakan Exams --容斥原理

    原题: URAL 1091  http://acm.timus.ru/problem.aspx?space=1&num=1091 题意:要求找出K个不同的数字使他们有一个大于1的公约数,且所有 ...

随机推荐

  1. linux exec函数家族

    1.exec家族一共有六个函数,分别是: (1)int execl(const char *path, const char *arg, ......); (2)int execle(const ch ...

  2. informix 查看数据库空间名

    查看bhrs库的空间名  onstat -d 导出一个表 的结构 dbschema -d bhrs -t infotrans > xxx.sql 微网点 报表已经上线 cbs.sql 提交,生产 ...

  3. hive与hbase的区别与联系

    共同点:1.hbase与hive都是架构在hadoop之上的.都是用hadoop作为底层存储 区别:2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBa ...

  4. javascript高级编程笔记03(正则表达式)

    引用类型 检测数组 注:我们实际开发中经常遇到要把数组转化成以逗号隔开,我以前都是join来实现,其实又更简单的方法可以用toString方法,它会自动用逗号隔开转换成字符串,其实toString内部 ...

  5. iOS8中的UIActionSheet添加UIDatePicker后,UIDatePicker不显示问题

    解决方法:   IOS8以前: UIActionSheet* startsheet = [[UIActionSheet alloc] initWithTitle:title delegate:self ...

  6. python xlrd,xlwt 读写excel文件

    python 读excel文件,需要xlrd库.下载地址:https://pypi.python.org/pypi/xlrd python 写excel文件,需要xlwt库.下载地址:https:// ...

  7. JavaScript typeof function()的注意事项

    首先,上一段代码: var f = function g() { return 23; }; console.log(typeof g); //输出undefined //console.log(ty ...

  8. Uva 12361 File Retrieval 后缀数组+并查集

    题意:有F个单词,1 <= F <=60 , 长度<=10^4, 每次可以输入一个字符串,所有包含该字串的单词会形成一个集合. 问最多能形成多少个不同的集合.集合不能为空. 分析:用 ...

  9. QML嵌入到QWidget中方法

    简介 嵌入方法有两种一种是直接拖控件,另一种是cpp代码动态生成, 控件方式 动态代码生成 QQuickWidget *m_quickWidget=new QQuickWidget(); QUrl s ...

  10. Android MediaStore与Media.EXTERNAL_CONTENT_URI

    MediaStore这个类是Android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取.这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,andro ...