hdu多校6
这个场要恶心死我了。。
1001
积分题,不要四舍五入
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fio ios::sync_with_stdio(false);cin.tie(0)
template<typename T>
inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>
inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=;while(b){if(b&)ans=ans*a%mod;a=a*a%mod,b>>=;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=;while(b){if(b&)ans=ans*a%c;a=a*a%c,b>>=;}return ans;} using namespace std; const double eps=1e-;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=+,maxn=+,inf=0x3f3f3f3f; int a,b;
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
double ans=pi*a+2.0*b;
ll ret = ans * ;
printf("%.6f\n", 1.0 * ret / );
}
return ;
}
/******************** ********************/
1012
物理题。。。。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
const int mod = ;
double a, b, x, y;
int main() {
int T; scanf("%d", &T);
while(T--) {
scanf("%lf%lf%lf%lf", &a, &b, &x, &y);
a=fabs(a);
b=fabs(b);
x=fabs(x);
y=fabs(y);
double h = x * (b) / a;
double val = b / sqrt(a * a + b * b);//sin double H=y-h;
double t=sqrt(*9.8*H)/9.8; double hi=;
for(int i = ;i <=; i++) {
hi+=*i*9.8*t*t*val*val;
if(hi>h){
printf("%d\n",i);
break;
}
}
} }
1009
村民永远无法确定,狼只能在只有一条狼边的环里确认,然后找出这些狼反推找其他狼。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define PLL pair<LL, LL>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +;
const double PI = acos(-);
const double eps = 1e-; int to[N], n, a[N];
bool vis[N], is[N];
char s[]; vector<int> edge[N];
int deg[N];
int main() {
int T; scanf("%d",&T);
while(T--){
memset(vis, , sizeof(vis));
memset(deg, , sizeof(deg));
memset(is, , sizeof(is));
queue<int> que, Q;
scanf("%d",&n);
for(int i = ; i <= n; i++) edge[i].clear();
for(int i = ; i <= n; i++) {
scanf("%d%s", &to[i], s);
if(s[] == 'w') {
a[i] = ;
} else {
a[i] = ;
edge[to[i]].push_back(i);
}
deg[to[i]]++;
} for(int i = ; i <= n; i++) {
if(!deg[i]) {
is[i] = true;
Q.push(i);
}
} while(!Q.empty()) {
int u = Q.front(); Q.pop();
int v = to[u];
if(is[v]) continue;
deg[v]--;
if(!deg[v]) {
Q.push(v);
is[v] = true;
}
} for(int i = ; i <= n; i++) {
if(is[i]) continue;
int id = -, cnt = , now = i;
while(!is[now]) {
is[now] = true;
if(a[now]) cnt++, id = to[now];
now = to[now];
}
if(cnt == ) {
vis[id] = true;
que.push(id);
}
} while(!que.empty()) {
int u = que.front(); que.pop();
for(int i = ; i < edge[u].size(); i++) {
int v = edge[u][i];
if(vis[v]) continue;
vis[v] = true;
que.push(v);
}
} int ans = ;
for(int i = ; i <= n; i++)
if(vis[i]) ans++;
printf("0 %d\n", ans);
}
return ;
}
/*
*/
补题****************************************************************************************
1002
我们首先要找出这两个性质。。。
gcd(2 ^ a - 1, 2 ^ b - 1) = gcd(2 ^ (gcd(a, b)) - 1)
gcd(fib[ i ], fib[ j ]) = f [gcd(i , j)]
http://bestcoder.hdu.edu.cn/blog/
题解说的很清楚啦
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e6 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; int inv[N << ], f[N << ], finv[N << ], fib[N], bin[N], stk[N], a[N], n, k, tot; int fastPow(int a, int b) {
int ans = ;
while(b) {
if(b & ) ans = 1ll * ans * a % mod;
a = 1ll * a * a % mod; b >>= ;
}
return ans;
} void add(int &a, int b) {
a += b; if(a >= mod) a -= mod;
}
void sub(int &a, int b) {
a -= b; if(a < ) a += mod;
} void init() {
finv[] = f[] = inv[] = f[] = finv[] = fib[] = ;
for(int i = ; i < N * ; i++) {
inv[i] = 1ll * (mod - (mod / i)) * inv[mod % i] % mod;
}
for(int i = ; i < N * ; i++) {
f[i] = 1ll * f[i - ] * i % mod;
finv[i] = 1ll * finv[i - ] * inv[i] % mod;
}
for(int i = ; i < N; i++) fib[i] = (fib[i - ] + fib[i - ]) % (mod - );
} int comb(int n, int m) {
return 1ll * f[n] * finv[m] % mod * finv[n - m] % mod;
} int main() {
init();
int T; scanf("%d", &T);
while(T--) {
memset(a, , sizeof(a)); tot = ;
scanf("%d%d", &n, &k); int ans = ;
for(int i = n; i >= ; i--) {
if(n % i) continue;
a[i] = comb(n / i + k - , k - );
for(int j = i + i; j <= n; j += i)
sub(a[i], a[j]);
add(ans, 1ll * a[i] * (((fastPow(, fib[i]) - + mod) % mod)) % mod);
}
ans = 1ll * ans * fastPow(comb(n + k - , k - ), mod - ) % mod;
printf("%d\n", ans);
}
return ;
}
1004
区间dp,先把线段的两个端点用极坐标离散化一下,总共只有2*n个发射方向。
dp[ i ][ j ]表示把完全位于i, j之间的线段都射穿需要的代价,对于一个区间来说
然后枚举最大需要的能量发射的方向之后变成两个独立区间然后转移。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; int n, tot;
LL f[N][N];
struct Point {
LL x, y;
Point(LL x = , LL y = ) : x(x), y(y) { }
} hs[N];
LL cross(const Point &a, const Point &b) {
return a.x * b.y - a.y * b.x;
}
bool operator < (const Point &A, const Point &B) {return cross(A, B) < ;}
bool operator == (const Point &A, const Point &B) {return cross(A, B) == ;}
struct Line {
Point L, R;
int w, l, r;
} a[N];
LL dp(int i, int j) {
if(i >= j) return ;
if(f[i][j] != -) return f[i][j];
int mx = -;
for(int k = ; k <= n; k++)
if(a[k].l >= i && a[k].r <= j && a[k].w > mx)
mx = a[k].w;
if(mx == -) return f[i][j] = ;
f[i][j] = INF;
for(int k = i; k <= j; k++) f[i][j] = min(f[i][j], dp(i, k - ) + dp(k + , j) + mx);
return f[i][j];
} int main() {
int T; scanf("%d", &T);
while(T--) {
memset(f, -, sizeof(f)); tot = ;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
LL h, l, r, w;
scanf("%lld%lld%lld%lld", &h, &l, &r, &w);
a[i].L = Point(l, h); a[i].R = Point(r, h); a[i].w = w;
hs[++tot] = a[i].L; hs[++tot] = a[i].R;
}
sort(hs + , hs + + tot);
tot = unique(hs + , hs + + tot) - hs - ;
for(int i = ; i <= n; i++) {
a[i].l = lower_bound(hs + , hs + + tot, a[i].L) - hs;
a[i].r = lower_bound(hs + , hs + + tot, a[i].R) - hs;
}
printf("%lld\n", dp(, tot));
}
return ;
} /*
*/
hdu多校6的更多相关文章
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 2015 HDU 多校联赛 5363 Key Set
2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...
- 2015 HDU 多校联赛 5317 RGCDQ 筛法求解
2015 HDU 多校联赛 5317 RGCDQ 筛法求解 题目 http://acm.hdu.edu.cn/showproblem.php? pid=5317 本题的数据量非常大,測试样例多.数据 ...
- [HDU多校]Ridiculous Netizens
[HDU多校]Ridiculous Netizens 点分治 分成两个部分:对某一点P,连通块经过P或不经过P. 经过P采用树形依赖背包 不经过P的部分递归计算 树型依赖背包 v点必须由其父亲u点转移 ...
- 【杂题总汇】HDU多校赛第十场 Videos
[HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...
- hdu多校1002 Balanced Sequence
Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...
- HDU多校(Distinct Values)
Problem Description Chiaki has an array of n positive integers. You are told some facts about the ar ...
- hdu 多校第一场
1001 思路:打表可以发现只有3|n 和 4|n 的情况有解,判一下就好啦. #include<bits/stdc++.h> #define LL long long #define f ...
随机推荐
- 关闭nginx日志
在nginx.conf中将 access_log /dev/null; error_log /dev/null;
- IAR ------ 扩展关键字__weak
__weak作用:允许多个同名函数同时存在,但是最多只有一个没有__weak修饰.如果有non-weak函数(没__weak修饰),则此函数被使用,否则从__weak修饰的函数中选择其中一个. 下图来 ...
- 关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
问答环节 问:在finetuning的时候,新问题的图像大小不同于pretraining的图像大小,只能缩放到同样的大小吗?" 答:对的:) 问:目前dl在时序序列分析中的进展如何?研究思路 ...
- java ==,equals(),hashCode()
java中的==.equals().hashCode()源码分析 在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. == java中 ...
- BZOJ2733:使用并查集维护连通性之后用线段树维护+线段树合并(动态开点)
可以说是线段树合并的裸题吧 题意就是给你两个操作 一个操作是合并两个集合,这两个集合都是用权值线段树维护的,便于查询第k小元素 另一个操作就是查询区间极值了 #include<cstdio> ...
- [Luogu 3966] TJOI 2013 单词
经典ACAM. 注意单词之间添加字符,以及对重复单词的处理. #include <cstdio> #include <cstring> #include <queue&g ...
- jQuery中val()、text()、html()之间的差别
一.括号里没有值时表示取值 val获取表单中的值: text获取对象中的文本内容,不包含html标签: html获取对象中的内容,包括html标签 <!DOCTYPE HTML> & ...
- PHP日期时间操作
一.设置时区 date_default_timezone_set('PRC'); 二.获取当前时间的 Unix 时间戳(格林威治时间 1970 年 1 月 1 日 00:00:00到当前时间的秒数)和 ...
- 【poj3522-苗条树】最大边与最小边差值最小的生成树,并查集
题意:求最大边与最小边差值最小的生成树.n<=100,m<=n*(n-1)/2,没有重边和自环. 题解: m^2的做法就不说了. 时间复杂度O(n*m)的做法: 按边排序,枚举当前最大的边 ...
- cocos2dx 某缩放的页面 CCTableView最后一个标签无法点中
有一个二级界面,在ipad4下面放大到1.6倍,直接对最外层的CCLayer缩放的,里面包含有CCTableView.结果运行的时候无法选中到最后一个标签,无论总的标签是2个还是更多,单步调试,发现到 ...