CodeForces 230A Dragons

    题目链接:http://vjudge.net/problem/viewProblem.action?id=32629

   这道题目,水!!!但做的我想骂街,训练赛的时候一直想着,这么水的题如果不A掉,怎么好意思往下面做。然而就是这道题,把我死死卡住了,各种各样的问题,有的都是我之前没有遇到的错误,难怪搞ACM的很少人使用 Java 编写代码,太TM变态了。

    下面是我解决这个问题中遇到的所有错误,为以后提个醒吧。

     其实这道题目首先我考虑错了,用到了栈,利用它的FILO性质,把不符合条件的压入栈,符合条件的进行运算,然后以栈是否为空判断输出结果:

//错误原因:因为栈是单方向出栈的,存在一种情况,当对阵 a 怪兽的时候,力量不足不能击败,所以 a 怪兽入栈,进行 a 下面
//的 b 怪兽判断,同样不能击败, b 怪兽入栈,接着进行 c 怪兽判断,能击败,力量值增加,但不能击败 b 怪兽......一直到最
//后一组数据的判断结束,都不能击败 b 怪兽,这种情况下,栈中还存在 a 和 b ,所以输出结果为 “NO”,但实际上,判断到最
//后时,Kirito的力量已经可以击败 a 怪兽了,击败 a 之后,力量值增加,以至于可以击败 b 怪兽,所以实际结果应该是 “YES” !!!



import java.util.*;

public class Main {

	/**
	 * @param args
	 */
	static final Scanner scan=new Scanner(System.in);
	static int S,n,sum;
	static int x,y;
	static Node[] N=new Node[1010] ;
	static Stack
   
   
    
     st=new Stack
    
    
     
     ();
	
	static class Node{
	    int x,y;
	    Node (int x,int y){
	    	this.x=x;
	    	this.y=y;
	    }
	    
	}	
	public static int dfs(Node s){
		
		st.push(s);
		while(!st.empty()){       
			Node u=st.pop();
			if(u.x>=S){
				st.push(u);break;
			}
			else{
				S+=u.y;
			}
		}
		return 0;
	}
;	public static void main(String[] args) {
		// TODO Auto-generated method stub
    	int i=0;
	    S=scan.nextInt();
	    n=scan.nextInt();
	    scan.nextLine();
	    while(n--!=0){
	    	x=scan.nextInt();
	    	y=scan.nextInt();
	    	scan.nextLine();
	    	N[i++]=new Node(x,y);
	    }
	    for(int j=0;j
     
     
    
    
   
   

错误1:Source  Code  Error
          其实这个错误如果长时间用 java 搞ACM的完全可以避免,ACM 要求java代码只能有一个类,即  public  class Main{ ........},如果在这个类外又定义的一个新类就会出现这个错误,把新定义的类放到Main类下即可,以为我是第一次遇到这个错误,所以当时感觉无从下手,不知道怎么解决,网上也没有找到答案,还是经过好心的队长提醒才发现这个错误。

错误2: Compilation error

             这个问题经常遇到,但错误的地方出乎我的意料
//代码段1
static class Node
		{
			int x,y;
			Node(int x,int y){
				this.x=x;
				this.y=y;
			}
		}

		static final Scanner scan=new Scanner(System.in);
		static int s,n,x,y;
		static Node[] N;

	    public static void sort(Node[] a,int t){  // 错误位置1
			for(int i=0;i
     
     
      
      a[i+1].x){
					Node tmp=a[i];
					a[i]=a[i+1];
					a[i+1]=tmp;
				}
			}
		}
		
//代码段2

        for(int i=0;i
      
      
       
       N[i+1].x){
					Node tmp=N[i];
					N[i]=N[i+1];
					N[i+1]=tmp;
				}
			}

      
      
     
     
错误1处是由于GDK编码问题,错误2处却实在不知道什么原因,我把 i < n - 1;处用 t = n - 1; i< n - 1;替换后,错误消失,很是纳闷。

         另外,Eclipse编写Java时,它会时不时的抽下风,在创建扫描器 Scanner 对象的部分( Scanner    scan = new   Scanner(System.in) ),有时会出现创建的扫描器对象没有关闭的警示,最好不要管他,因为你一旦重视了它,在后面添了一句  scan.close()  语句,那提交的时候,就会连第一个测试数据都过不了。

         其他还有一些大大小小的问题,都是一些常见问题,只要稍加注意就可避免。

下面是我AC的Java代码:
import java.util.*;

	public class  Main
	{
		static class Node{                    
			int x,y;
			Node(int x,int y){
				this.x=x;
				this.y=y;
			}
		}
		static final Scanner scan=new Scanner(System.in);
		static int s,n;
		static int x,y;
		static Node[] N=new Node[1010];
	    
	
		public static void main(String[] args) 
		{
			s=scan.nextInt();
			n=scan.nextInt();
			
			for(int i=0;i
     
     
      
      N[j].x){
						Node tmp=N[i];
						N[i]=N[j];
						N[j]=tmp;
					}

				}
			}
			for(int i=0;i
      
      
       
       N[i].x)
					s+=N[i].y;
				else{
					System.out.println("NO");
					return;
				}
			}		
			System.out.println("YES");
		}
	}

      
      
     
     
下面是看到的别人代码,只是读取数据的方式不对,他的方式避免了对回车键的意外读入,但增加了耗时,其实只要在我的代码中添加 scan.nextLine() 语句,同样可避免这个问题,贴他的代码只是用来学习下他的数据录入方式:
import java.util.Scanner;

public class Problem6 {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		//******************************************************************************************
		String l1=in.nextLine();                 //以字符串形式读取数据
		String[] two=l1.split("\\ ");             //以空格分离字符串
		int s=Integer.parseInt(two[0]);           //字符串转化为整形
		int n=Integer.parseInt(two[1]);
		//*****************************************************************************************
		int[][] dims=new int[n][2];
		for(int i=0;i
      
      
       
       dims[i][0])
				s+=dims[i][1];
			else
				return false;
		}
		return true;
	}
}


      
      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值