[hdu3477] Temperature [3472] HS BDC
来源:互联网 发布:linux ls显示文件名 编辑:程序博客网 时间:2024/04/29 14:27
Temperature
http://acm.hdu.edu.cn/showproblem.php?pid=3477
题目描述略。微积分题,推导过程如下:
-dT/dt=k(T-E) (T为汤的温度,E为环境温度,由Hint里的 Newton’s law of cooling知k是常数。)
积分得 -[dT/(T-E)=[kdt (“[” 表示积分号……)
化简得ln(1/(T-E)) = kt+C
整理得1/(T-E) = Cexp(kt)
当t=0时,求出C=1/(T-E)=1/(u0-ua)
k=(ln(u0-ua)-ln(u1-u1))/t1
T=1/(Cexp(kt))+E
就都可以算了
注意要特殊判断ua-u0,否则有的地方会除零
代码:
#include <cstdio>#include <cstdio>#include <cstdlib>#include <math.h>#include <algorithm>using namespace std;const double EPS=1e-5;int main(){ int cs, n, op, b; double ua, u0, u1, t1; double k, C; scanf("%d", &cs); for (int css=1; css<=cs; css++) { scanf("%lf%lf%lf%lf%d", &ua, &u0, &u1, &t1, &n); k=(log(u0-ua)-log(u1-ua))/t1; C=1.0/(u0-ua); printf("Case %d:\n", css); for (int i=0; i<n; i++) { scanf("%d%d", &op, &b); if (op==0) { if (fabs(ua-u0)<EPS) printf("0.00\n"); else printf("%.2lf\n", log(1.0/(C*(b-ua)))/k); } else { if (fabs(ua-u0)<EPS) printf("%.2lf\n", ua); else printf("%.2lf\n", 1/(C*exp(k*b))+ua); } } printf("\n"); } return 0;}
HS BDC
http://acm.hdu.edu.cn/showproblem.php?pid=3472
题目大意:
给出一些单词,有些单词可以翻转使用,问所有能不能首尾相接(上一个单词尾字母=后一个单词首字母)连成一个串。
题目分析:
今天第一次写混合图的欧拉回路判断。
参考资料:http://www.cnblogs.com/ylfdrib/archive/2010/08/21/1805201.html
这道题要求的是欧拉路径,也就是原图中可能不存在欧拉回路的。找两个degree为奇数的点,连一条边就可以了。
注意用一个并查集先判断一下基图是否连通。
#include <cstdio>#include <cstdlib>#include <cstring>#include <limits.h>#include <algorithm>using namespace std;#define maxn 30int g[28][29]; //26+2int f[28][28];int deg[28];int father[28];bool show[28];void MakeSet(int a){ father[a]=a;}int Find(int a){ if(father[a]==a) return a; return father[a]=Find(father[a]);}bool Same(int a,int b){ return Find(a)==Find(b);}void Union(int a,int b){ father[Find(a)]=Find(b);}void order(char &ch1, char &ch2){ if (ch1>ch2) { char t=ch1; ch1=ch2; ch2=t; }}bool init(){ int n, tag, odd; char word[30], ch1, ch2; scanf("%d", &n); memset(g, 0, sizeof(g)); //只存无向边的任意定向 memset(deg, 0, sizeof(deg)); memset(show, 0, sizeof(show)); for (int i=0; i<26; i++) MakeSet(i); for (int i=0; i<n; i++) { scanf("%s%d", word, &tag); ch1=word[0]; ch2=word[strlen(word)-1]; if (ch1==ch2) continue; if (tag==1) { order(ch1, ch2); g[ch1-'a'][ch2-'a']++;// printf("ch1=%c ch2=%c\n", ch1, ch2); } deg[ch1-'a']--; deg[ch2-'a']++; show[ch1-'a']=show[ch2-'a']=true; Union(ch1-'a', ch2-'a'); } for (int i=0; i<26; i++) if (show[i]) { for (int j=i+1; j<26; j++) if (show[j] && !Same(i, j)) return false; //不连通 break; } odd=0; for (int i=0; i<26; i++) if (show[i] && deg[i]%2!=0) { if (odd==0) ch1=i+'a'; else if (odd==1) ch2=i+'a'; odd++; if (odd>2) return false; } if (odd==1) return false; else if (odd==2) { order(ch1, ch2); g[ch1-'a'][ch2-'a']++; deg[ch1-'a']--; deg[ch2-'a']++; } return true;}void build_graph(int &total){ int src=26, dst=27; total=0; for (int i=0; i<26; i++) if (show[i] && deg[i]!=0) { if (deg[i]<0) { g[src][i]=(-deg[i])/2; total+=g[src][i];// printf("src %c %d\n", i+'a', g[src][i]); } else { g[i][dst]=deg[i]/2;// printf("%c dst %d\n", i+'a', g[i][dst]); } }// for (int i=0; i<26; i++)// { for (int j=0; j<26; j++)if (g[i][j]>0)printf("(%c %c) %d\n ",i+'a', j+'a',g[i][j]);}}int EdmondsKarp(int n,int src,int dst){ int d[maxn]={},p[maxn],r[maxn]={},c[maxn]={n}; int flow=0,delta=INT_MAX,h[maxn],v=src; memset(f, 0, sizeof(f)); p[src]=-1; while(d[src]<n) { bool flag=true;; h[v]=delta; for(int i=r[v];i<n;i++) if(g[v][i]>f[v][i]&&d[v]==d[i]+1) { if(delta>g[v][i]-f[v][i]) delta=g[v][i]-f[v][i]; flag=false; r[v]=i;p[i]=v;v=i; break; } if(flag) { int t=n-1; for(int i=0;i<n;i++) if(t>d[i]&&f[v][i]<g[v][i]) {t=d[i];r[v]=i;} if(--c[d[v]]==0) break; d[v]=t+1; c[d[v]]++; if(p[v]!=-1) {v=p[v];delta=h[v];} } else if(v==dst) { flow+=delta; while(p[v]!=-1) { f[v][p[v]]-=delta; f[p[v]][v]+=delta; v=p[v]; } delta=INT_MAX; } } return flow;}int main(){ int cs, total; scanf("%d", &cs); for (int css=1; css<=cs; css++) { printf("Case %d: ", css); if (!init()) { printf("Poor boy!\n"); continue; } build_graph(total); if (EdmondsKarp(28, 26, 27)!=total) printf("Poor boy!\n"); else printf("Well done!\n"); } return 0;}第一次写这种题,mark一下~
- [hdu3477] Temperature [3472] HS BDC
- Hdu 3472 HS BDC
- hdu 3472 HS BDC
- hdu 3472 HS BDC
- 【混合欧拉】 HDOJ 3472 HS BDC
- hdu 3472 HS BDC(混合欧拉路径)
- HDU 3472 HS BDC 混合图欧拉回路 网络流
- hdu 3472 HS BDC 混合欧拉 网络流
- HS BDC (hdu 3472 混合图的欧拉回路)
- HDU 3472 HS BDC 混合欧拉回路通路
- HDU 3472 HS BDC 混合图的欧拉路径
- HDU 3472 HS BDC 混合图欧拉路径 最大流
- HDOJ 3472 - HS BDC 判断混合图是否存在欧拉通路
- HDU 3472 HS BDC(混合欧拉图(使用最大流))模板
- HDU 3472 HS BDC 混合图的欧拉路径判断 (网络流)
- hdu3472 HS BDC --- 混合图欧拉回路
- 混合图欧拉回路(hdoj3472 HS BDC)
- hdu3472 (tju3555) HS BDC (混合图的欧拉回路)
- 一个cdecl 程序的混乱版本 150行的代码用15行解决
- 搞IT的到底怎么了
- PHP做的一个简单投票系统
- Got the job
- toj 3140
- [hdu3477] Temperature [3472] HS BDC
- 作为程序员为什么一直都很努力,却没有进步? .
- tomcat用户配置
- 成都IT公司
- doubango调试模式
- poj 3321
- Sql语句
- poj 2155
- 给我一个婚介所,就能搞到一群姑娘! -- mediator(中介者)设计模式的精髓 .