zoukankan      html  css  js  c++  java
  • Kattis, Kattis 的一些问题题解

    题目链接

    Thanos

    题意

    有T组数据,每组数据给你三个数P,R, F, P每年人数增长R倍,一个人一年吃1吨食物,每年有F吨食物而且多的不能留到下一年,问你可以这个星球离毁灭还有多少年?

    思路

    • 我一开始用公式做,一直WA, 开始怀疑是精度的问题
    • 所有这种题目能直接暴力枚举就不要用公式 噫吁戱

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll P,R,F;
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%lld%lld%lld",&P,&R,&F);
    		ll ans=0;
    		while(P<=F)
    		{
    			ans++;
    			P*=R; 
    		}
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    

    题目链接

    conquest campaign

    题意

    • 你要攻打下R*C的地方,题目给出第一天攻打的几块格子,你接下来每天都可以在之前攻打下的地方的上下左右方向去攻打地方。问你需要多少天你才能攻打下所有地方。

    注意事项

    • 注意更新今天攻打的对方的时候,不要因为今天其他攻打了的地方与这个地方相连而攻打了这个地方
    • 注意边界
    • 这块地能不能更新其他的地要 1,看这个地方是不是今天更新的 2,看这个地方是不是更新过

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=105;
    int maze[MAXN][MAXN];
    int r,c,n;
    int ans=1;
    bool judge(){
    	bool flag=true;
    	for(int i=1;i<=r;i++){
    		for(int j=1;j<=c;j++){
    			if(maze[i][j]!=(ans+1)&&maze[i][j]){
    				if(i>1&&!maze[i-1][j]){
    					maze[i-1][j]=ans+1;
    					flag=false;
    				}
    				if(j>1&&!maze[i][j-1]){
    					maze[i][j-1]=ans+1;
    					flag=false;
    				}
    				if(j<c&&!maze[i][j+1]){
    					maze[i][j+1]=ans+1;
    					flag=false;
    				}
    				if(i<r&&!maze[i+1][j]){
    					maze[i+1][j]=ans+1;
    					flag=false;
    				}
    			}
    			if(maze[i][j]==0){
    				flag = false;
    			}
    		}
    	}
    	if(!flag)
    		ans++;
    	return flag;
    }
    int main()
    {
    	memset(maze,0,sizeof(maze));
    	scanf("%d%d%d",&r,&c,&n);
    	int x,y;
    	ans=1;
    	for(int i=1;i<=n;i++){
    		scanf("%d%d",&x,&y);
    		maze[x][y]=1;
    	}
    	while(!judge()){
    	}
    	printf("%d
    ",ans);
    	return 0;
     } 
    

    题目

    hydrasheads

    题意

    • hydra有h个头,t个尾巴,你可以进行四种操作
      • 砍一个头,生出一个头 (相当于没有操作)
      • 砍一个尾巴,生出两个尾巴 (相当于可以t+1)
      • 砍两个头 (h-2)
      • 砍两个尾巴,生出一个头 (h+1,t-2)
    • hydra不可能有负数个头和尾巴,(0,0)还可能生出头或者尾巴的话,也不算死。
    • 问你最少多少步可以杀死它

    思路

    • dfs
    • 记忆化
    • 注意初始化

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int INF=0x3f3f3f3f;
    int ans=INF;
    typedef pair<int,int> pa;
    map<pa,int> dic;
    int dfs(int h,int t){
    	if(dic.count(make_pair(h,t)))	return dic[make_pair(h,t)];
    	if(!t&&!(h&1)){
    		dic[make_pair(h,t)]=(h>>1);
    		return (h>>1);
    	}
    	int ret = INF;
    	if(h<=2&&t<=2)	ret = min(ret,dfs(h,t+1));
    	if(h>=2&&t>=0)	ret = min(ret,dfs(h-2,t));
    	if(t>=2&&h>=0)	ret = min(ret,dfs(h+1,t-2));
    	ret++;
    	dic[make_pair(h,t)]=ret;
    	return ret;	
    }
    int main()
    {
    	int h,t;
    	while(scanf("%d%d",&h,&t)){
    		dic.clear();
    		dic[make_pair(2,0)]=1;
    		dic[make_pair(1,0)]=INF;
    		dic[make_pair(0,0)]=0;
    		dic[make_pair(0,4)]=3;
    		dic[make_pair(1,2)]=2;
    		if(!h&&!t) break;
    		ans=dfs(h,t);
    		if(ans==INF) ans=-1;
    		printf("%d
    ",ans);
    	}
    	return 0;
     } 
    
  • 相关阅读:
    范仁义网站刷题教程
    心得体悟帖---200115(对人要好)(浪费时间可耻)
    心得体悟帖---200114(解决问题啊)(解决问题)
    legend3---laravel缓存操作基本使用实例
    JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案
    Java正则表达式入门
    Android中scrollview的scrollto方法不起作用的办法
    Android中监听ScrollView滑动停止和滑动到底部
    视频
    Android Scroller类的详细分析
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/12880178.html
Copyright © 2011-2022 走看看