这是这学期第二次周赛的题目,第一周的题目略坑,还在研究中。
A. The area
这道题题意是有一个开口向下的抛物线,与一条直线有两个交点,且交点位于抛物线顶点的两段。
给出两交点和顶点的坐标,求围成的面积。
就是一道简单的积分题。我写错了个变量,debug了很久。。sb了。。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; struct node { double x; double y; }; double a,b,c; double K,B; node p[4]; double gao(double x) { double s=0; s=a*x*x*x+b*x*x+c*x; return s; } int main () { int t,i; cin>>t; double area; while(t--) { for (i=1; i<=3; i++) scanf("%lf%lf",&p[i].x,&p[i].y); // for (i=1; i<=3; i++) // printf("%lf %lf\n",p[i].x,p[i].y); b=p[1].x; c=p[1].y; a=(p[2].y-c)/((p[2].x-b)*(p[2].x-b)); c=a*b*b+c; b=(-2.0)*a*b; K=(p[3].y-p[2].y)/(p[3].x-p[2].x); B=p[3].y-K*p[3].x; b=b-K; c=c-B; // cout<<a<<" "<<b<<" "<<c<<" "<<K<<" "<<B<<endl; a=a/3; b=b/2; // cout<<a<<" "<<b<<" "<<c<<endl; area=gao(p[3].x)-gao(p[2].x); printf("%.2f\n",area); } return 0; }
一道水题,立马体现出了自己基本概念吃的不够透。。
一开始既然T了。。
代码就不贴了。。
C. 回文数猜想
好久没有敲题了,既然没有将用过的字符串清空。。蛋疼。。RE了两次。而且写的很麻烦,一开始思路不清晰
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<ctype.h> using namespace std; int map[1000000]; char a[15],b[15]; int len; void change() { int i,j=0; for (i=len-1; i>=0; i--) b[j++]=a[i]; b[j]='\0'; } int main () { int i,j,k,s,num1,num2; while(scanf("%s",a)!=EOF) { s=0; len=strlen(a); change(); if (strcmp(a,b)==0) { sscanf(a,"%d",&num1); map[s++]=num1; } else { change(); while(1) { sscanf(a,"%d",&num1); map[s++]=num1; if (strcmp(a,b)==0) break; sscanf(b,"%d",&num2); num1=num2+num1; memset(b,0,sizeof(b)); memset(a,0,sizeof(a)); i=0; while(num1>0) { b[i++]=num1%10+'0'; num1=num1/10; } b[i]='\n'; len=i; j=0; for (i=len-1; i>=0; i--) a[j++]=b[i]; a[j]='\n'; // puts(a); // puts(b); } } cout<<s-1<<endl; for (i=0; i<s-1; i++) cout<<map[i]<<"--->"; cout<<map[s-1]<<endl; } return 0; }
HDU 1282 水题
裸的DFS
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; char map[105][105]={0}; int dir[8][2]={{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}}; int n,m,visit[105][105]={0}; int in(int x, int y) { if (x>=0 && x<n && y>=0 && y<m) return 1; return 0; } void dfs(int x, int y) { int i,j,k,tx,ty; visit[x][y]=1; for (i=0; i<8; i++) { tx=x+dir[i][0]; ty=y+dir[i][1]; if (!visit[tx][ty] && in(tx,ty) && map[tx][ty]=='W') { dfs(tx,ty); } } } int main () { scanf("%d%d",&n,&m); int i,j,s=0; for (i=0; i<n; i++) for (j=0; j<m; j++) cin>>map[i][j]; for (i=0; i<n; i++) for (j=0; j<m; j++) if (!visit[i][j] && map[i][j]=='W') { s++; dfs(i,j); } cout<<s<<endl; return 0; }
这道题还挺有意思的,主要是要建立一个数组来记录性别
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #define maxn 2010 using namespace std; int n,m,f[maxn]={0},sex[maxn]={0}; int find(int x) { if (x==f[x]) return x; return (f[x]=find(f[x])); } void uni(int x, int y) { x=find(x); y=find(y); f[x]=f[y]; } int main () { int t,i,j,p=1; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for (i=1; i<=n; i++) { f[i]=i; sex[i]=0; } int flag=1; while(m--) { scanf("%d%d",&i,&j); int a,b; if (flag) { a=find(i); b=find(j); if (a==b) flag=0; else { if (!sex[i]) sex[i]=j; else uni(sex[i],j); if (!sex[j]) sex[j]=i; else uni(sex[j],i); } } } if (flag) printf("Scenario #%d:\nNo suspicious bugs found!\n",p++); else printf("Scenario #%d:\nSuspicious bugs found!\n",p++); cout<<endl; } return 0; }
hdu 2544 最短路
裸题
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<queue> #define MAXN 105 #define INF 1000000 using namespace std; int map[MAXN][MAXN]; int n,m; void init() { int i,j,k; for (i=1; i<=n; i++) { for (j=1; j<=n; j++) map[i][j]=INF; map[i][i]=0; } while (m--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if (map[a][b]>c) { map[a][b]=c; map[b][a]=c; } } } void dijkstra(int s, int e) { int i,j,k; int dist[MAXN]; int visited[MAXN]; memset(visited,0,sizeof(visited)); visited[s]=1; for (i=1; i<=n; i++) dist[i]=map[s][i]; dist[s]=0; for (j=1; j<=n-1; j++) { int temp=INF; for (i=1; i<=n; i++) if (!visited[i] && dist[i]<temp) { temp=dist[i]; k=i; } visited[k]=1; for (i=1; i<=n; i++) if (!visited[i] && dist[k]+map[k][i]<dist[i]) dist[i]=dist[k]+map[k][i]; } printf("%d\n",dist[e]); } void spfa(int s, int e) { queue<int> q; int i,j,k; int dist[MAXN]; int visited[MAXN]; for (i=1; i<=n; i++) dist[i]=INF; dist[s]=0; memset(visited,0,sizeof(visited)); visited[s]=1; q.push(s); while (!q.empty()) { int x=q.front(); q.pop(); visited[x]=0; for (i=1; i<=n; i++) { if (dist[i]>dist[x]+map[x][i]) { dist[i]=dist[x]+map[x][i]; if (!visited[i]) { q.push(i); visited[i]=1; } } } } printf("%d\n",dist[e]); } int main () { while (cin>>n>>m) { if (n==0 && m==0) break; init(); spfa(1,n); //dijkstra(1,n); } return 0; }
这就是一个简单的数学题。每次走到河流岸边时,(河流长度为L),那么分配到每个点的概率为1/(L+1)(因为是从0到L)。而每个点可以向左和向右动,仔细观察发现向左和向右的路径之和为恒定的值(2L)。
然后就很简单了。。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int main () { int n,d,i,j,pk=1,p,l,v; while(scanf("%d%d",&n,&d)!=EOF) { if (n==0 && d==0) break; double t=0; int s=d; while(n>0) { scanf("%d%d%d",&p,&l,&v); s-=l; t+=1.0*(l*l)/((l)*(v)); t+=l*1.0/v; n--; } t+=s; printf("Case %d: %.3f\n\n",pk++,t); } return 0; }
裸的最小生成树
POJ 1251 MST
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define INF 10000 using namespace std; int map[27][27]={0}; int n,s; void init() { int i,j,t; char ch; for (i=0; i<n; i++) { for (j=0; j<n; j++) map[i][j]=INF; map[i][i]=0; } for (i=0; i<n-1; i++) { cin>>ch>>t; while(t>0) { cin>>ch>>j; map[i][ch-'A']=map[ch-'A'][i]=j; t--; } } } void prime() { int i,j,k=0; s=0; int visit[30]={0}; int low[30]={0}; for (i=0; i<n; i++) low[i]=map[0][i]; visit[0]=1; for (i=1; i<n; i++) { int t=INF; for (j=0; j<n; j++) if (!visit[j] && low[j]<t) { k=j; t=low[j]; } s=s+low[k]; visit[k]=1; for (j=0; j<n; j++) if (!visit[j] && low[j]>map[k][j]) low[j]=map[k][j]; } cout<<s<<endl; } int main () { while(scanf("%d",&n)!=EOF) { if (n==0) break; init(); // for (int i=0; i<n; i++) // { // for (int j=0; j<n; j++) // cout<<map[i][j]<<" "; // cout<<endl; // } prime(); } return 0; }
这道也是很基础的BFS。做过挺多次了 不贴代码了