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下定时发送邮件

    at命令可以在某个时间运行某个程序,而mail可以以命令行的方式把存于一个文本中的邮件正文发送抄送出去. 具体用法:  1. 把email正文准备好,比如写在email.txt里  2. 然后写一个脚 ...

  2. C++练习题

    1. 用面向对象的程序描述员工拥有的股票,股票有公司,价格,数量属性,且拥有展现基本数据,更新价格,买进,卖出操作,并具有比较两个股票对象股值大小的比较方法. 2. 用面向对象的程序描述一个栈的操作, ...

  3. ECSHOP安装或使用中提示Strict Standards: Non-static method cls_image:

    随着ECSHOP的不断发展,越来越多的人成为了ECSHOP的忠实粉丝.由于每个人的服务器环境和配置都不完全相同,所以ECSHOP也接二连三的爆出了各种各样的错误信息.相信不少新手朋友在ECSHOP安装 ...

  4. 让Eclipse使用新版本的JRE

    更新到新的 Mac OS X 再打开Eclipse 编译程序会报错, Exception in thread "main" java.lang.UnsupportedClassVe ...

  5. asp.net 简单实现禁用或启用页面中的某一类型的控件

    我们在提交一个表单的时候,可能由于网络或服务器的原因,处理很慢,而用户在处理结果出来之前反复点击按钮提交.这样很容易造成不必要的麻烦甚至是错误.说了这么多,其实就是要实现一个禁用某些控件的一种功能.好 ...

  6. easyui源码翻译1.32--ValidateBox(验证框)

    前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...

  7. 如何让centos6.5在vm11里上网,连接网络?

    如何让centos在vm里连接网络?步骤有3,方可解决: 1.配置vm的虚拟网络编辑器 2.配置虚拟机centos 3.设置centos的ip地址 一.配置vm的虚拟网络编辑器

  8. 气死人不偿命,Q_OBJECT导致的C++报错,而且还看不明白(#ifdef没控制好,导致什么都不认识了)

    为了代码可以同时适应VC++和MingW编译器,我改动了我的代码,变成: #ifdef _MSC_VER #pragma comment(lib, "crypt32.lib") / ...

  9. 【Quick 3.3】资源脚本加密及热更新(二)资源加密

    [Quick 3.3]资源脚本加密及热更新(二)资源加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 在前一篇文章中介绍了代码加密,加密方式是XXTEA.对于资源文件来说,同样 ...

  10. istringstream、ostringstream、stringstream 类介绍 .

    istringstream.ostringstream.stringstream 类介绍 . 转自:http://www.cnblogs.com/gamesky/archive/2013/01/09/ ...