題目一:http://www.topcoder.com/stat?c=problem_statement&pm=10309
解題思路:根據di = 1/2*g*(ti^2) 以第一個為參照,求得所有後面的與第一個的比例關係。
然後根據sum(ti)=T 求出第一個的t1,再根據d1 = 1/2*g*(t1^2) 求出g
後來看了別人的代碼,發現有更簡單的做法,首先對t開方出來。
#include<iostream><br />#include<stdio.h><br />#include<vector><br />#include<cmath><br />using namespace std;</p><p>struct IncredibleMachineEasy<br />{<br />double fun(int xi,int x1)<br />{<br />return sqrt((double)xi/x1);<br />}<br />double gravitationalAcceleration(vector <int> height, int T)<br />{<br />double totel = 1;<br />for(int i=1;i<height.size();i++)<br />{<br /> totel+=fun(height[i],height[0]);<br />}<br />//cout<<totel<<endl;<br />double t=(double)T/totel;<br />return 2.0*(double)height[0]/(t*t);<br />}<br />};
題目二:http://www.topcoder.com/stat?c=problem_statement&pm=10288
解題思路:深搜記錄並統計就可以了
#include <iostream><br />#include <vector><br />#include <string><br />using namespace std;</p><p>struct MazeWanderingEasy<br />{<br />int sx,sy;<br />int an;<br />bool flag[55][55];<br /> int dir[4][2];//={{-1,0},{1,0},{0,1},{0,-1}};</p><p> bool judge(int x,int y)<br />{<br />if(x>=0&&x<sx&&y>=0&&y<sy)<br />return true;<br />return false;<br />}</p><p>void dfs(vector<string> maze,int x,int y,int totel)<br />{<br />if (maze[x][y]=='*')<br />{<br />an = totel;<br />}<br />flag[x][y] = true;//exe<br />int count = 0;<br />bool f[10];<br />int xx,yy;<br />memset(f,false,sizeof(f));<br />for (int i=0;i<4;i++)<br />{<br />xx=x+dir[i][0];<br />yy=y+dir[i][1];<br />if (judge(xx,yy)==false) continue;<br /> if(maze[xx][yy]=='X') continue;<br />if(flag[xx][yy]==true) continue;<br />count++;<br /> f[i]=true;<br />}<br />int add=0;<br />if(count>1) add=1;<br />for(int j=0;j<4;j++)<br />{<br />if (f[j]==false) continue;<br />xx=x+dir[j][0];<br />yy=y+dir[j][1];<br /> dfs(maze,xx,yy,totel+add);<br />}<br />}</p><p>int decisions(vector<string> maze)<br />{<br />sx = maze.size();<br />sy = maze[0].size();<br />for (int i=0;i<sx;i++)<br />{<br />for (int j=0;j<sy;j++)<br />{<br />if (maze[i][j]=='M')<br />{<br />memset(flag,false,sizeof(flag));</p><p>dir[0][0]=-1;dir[0][1]=0;<br />dir[1][0]=1;dir[1][1]=0;<br />dir[2][0]=0;dir[2][1]=-1;<br />dir[3][0]=0;dir[3][1]=1;</p><p>int temp=0;<br />dfs(maze,i,j,temp);<br />return an;<br />}<br />}<br />}<br />}<br />};
題目三:http://www.topcoder.com/stat?c=problem_statement&pm=10289
解題思路:利用next_permutation()產生的全排列,依次進行判斷。System Test 238組資料有一組資料逾時了。我也知道這樣資料大就逾時,不過dp的方法還沒想出來,先就掛這個把。歡迎大牛指教我!
#include <iostream><br />#include <algorithm><br />#include <vector><br />using namespace std;</p><p>//分母:size!</p><p>struct WickedTeacher<br />{<br />/*<br />void print(iterator::vector<int> x)<br />{<br />cout<<*x<<" ";<br />}<br />*/<br />long gcd(long a,long b)<br />{<br />if(b==0) return a;<br />return gcd(b,a%b);<br />}<br />string cheatProbability(vector<string> numbers, int K)<br />{<br />int size=numbers.size();<br />vector<int> test(size);<br />for(int i=0;i<size;i++) test[i]=i;<br />long count=0;</p><p>int sum=0;<br />for(int j=0;j<size;j++)<br />for(int r=0;r<numbers[test[jj]].size();r++)<br />{<br />sum=sum*10+numbers[test[jj]][r]-'0';<br />sum%=K;<br />}</p><p>if(sum==0) count++;</p><p>while(next_permutation(test.begin(),test.begin()+size))<br />{<br />//for_each(test.begin(),test.begin()+size,print);<br />/*<br />for (int i=0;i<test.size();i++)<br />{<br />cout<<test[i];<br />}<br />cout<<endl;<br />*/<br />//test[0]...test[last]<br />sum=0;<br />for (int j=0;j<size;j++)<br />{<br />for(int r=0;r<numbers[test[j]].size();r++)<br />{<br />sum=sum*10+numbers[test[j]][r]-'0';<br />sum%=K;<br />}<br />}<br />if(sum==0) count++;<br />}<br />long totel=1;<br />for(int p=2;p<=size;p++) totel*=p;<br /> long temp=gcd(totel,count);<br />totel/=temp;<br />count/=temp;<br />//count/totel<br />string str;<br />if(totel==0)<br />str.push_back('0');<br />else<br />while (totel)<br />{<br />str.push_back(totel%10+'0');<br />totel/=10;<br />}<br />str.push_back('/');<br />if(count==0)<br />str.push_back('0');<br />else<br />while (count)<br />{<br />str.push_back(count%10+'0');<br />count/=10;<br />}<br />reverse(str.begin(),str.end());<br />return str;<br />}<br />};