码迷,mamicode.com
首页 > 其他好文 > 详细

2015百度之星资格赛题解

时间:2015-05-26 09:17:42      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:百度之星   资格赛   2015   题解   

1001:

可以看作找规律,其实是组合数学的一道题目。符合要求的对应关系是要么是自己和自己对应,要么是互相对应,即1->2则2->1。

因为对于任何一个数如果他和自己本身对应,那么剩下还有n-1个数;如果他对应别的数(假定是a),那么a一定也和他对应,这样剩下还有n-2

个数,并且他可以对应的数的选择有n-1种,所以,可得递推关系 f[i]=((i-1)*f[i-2]+f[i-1]);

#include<iostream>
using namespace std;
long long f[1000002];
int main()
{
	int T;
	f[1]=1,f[2]=2;
	for(int i=3;i<=1000000;i++)
	f[i]=((i-1)*f[i-2]%1000000007+f[i-1]%1000000007)%1000000007;
	long long n;
	cin>>T;
	int cas=1;
	while(T--)
	{
		cin>>n;
		cout<<"Case #"<<cas++<<":"<<endl;
		cout<<f[n]<<endl;
		
	}
	return 0;
}

1003:

模拟题+字符串处理,用istringstream处理输入的字符串,取出数字进行&操作,最后将地址放入set,自动去重。

注意一点,最后不要偷懒 去掉数字之间的‘.’,因为会造成wa,假如数字分别是8.28和82.8会当作一样的,造成错误。

#include<iostream>
#include<set>
#include<string>
#include<sstream>
#include<stack>
#include<algorithm>
using namespace std;
set <string> st;
stack <int> stk;
int num;
int res[1005][5]; 
int tar[5];
int main()
{
	int T,n,m;
	string s,s1,sk;
	cin>>T;
	int cas=1;
	while(T--)
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		{
			int p=1;
		    cin>>sk;
		    for(int k=0;k<sk.length();k++)
		    if(sk[k]=='.')
		    sk[k]=' ';
		    istringstream inna(sk);
		    while(inna>>num)
		    {
    			res[i][p++]=num;
    		}
    
		}
		int op=1;
		 cout<<"Case #"<<cas++<<":"<<endl;
		for(int i=1;i<=m;i++)
		{
			st.clear();
			cin>>s1;
			for(int k=0;k<s1.length();k++)
		    if(s1[k]=='.')
		    s1[k]=' ';
			istringstream  in(s1);
			int tarn=1;
			while(in>>num)
			{
				tar[tarn++]=num;
			}

			for(int i=1;i<=n;i++)
			{ 
				string nnn;
				for(int j=1;j<=4;j++)
				{ 
				  int now=tar[j]&res[i][j]; 
		
					while(now)
					{
						stk.push(now%10);
						now/=10;
					}
					while(!stk.empty())
					{
					   nnn+=stk.top()+'0';
					   stk.pop();
					}
					nnn+='.';//坑比 
		
			
				} 
				st.insert(nnn);
			} 
			cout<<st.size()<<endl;	
		}
	}
	return 0;
}

1004 简单的博弈,也算计算几何吧。  hint里面有提示,所以根据nim博弈的规则,只要先手能将盘子放入中央,那么一定获胜,因为要么后手放不下,要么先手总是可以和后手关于中心对称放置,取得胜利。画下图,简单的几何关系。

#include<iostream>
#include<cmath>
using namespace std;
#define pi 3.14159265358
int main()
{
	int T;
	cin>>T;
	double n,a,r;
	int cas=1;
	while(T--)
	{
		cin>>n>>a>>r;
		double cur=0.0;
		cur=a/2/(tan(pi/n));
		cout<<"Case #"<<cas++<<":"<<endl;
		if(r<=cur)
		cout<<"Give me a kiss!"<<endl;
		else
	    cout<<"I want to kiss you!"<<endl;
	}
	return 0;
} 




2015百度之星资格赛题解

标签:百度之星   资格赛   2015   题解   

原文地址:http://blog.csdn.net/nk_test/article/details/45999111

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!