| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么这段代码会WA啊...求大牛帮忙测试一下!!!import java.io.*;
import java.util.*;
public class Main {
//代表读入的pair
private ArrayList<Point> pair=null;
//代表结果图
private ArrayList<Point> vMap=null;
//代表图的宽度
private int iWidth;
//代表读入的值
private int iParam;
//代表读入的数量
private int iCount;
//代表总数目
private int iNum;
//代表当前位置
private int iPos;
class Point{
private int firstVal;
private int secondVal;
public Point(int firstVal,int secondVal)
{
this.firstVal=firstVal;
this.secondVal=secondVal;
}
public int getFirstVal() {
return firstVal;
}
public void setFirstVal(int firstVal) {
this.firstVal = firstVal;
}
public int getSecondVal() {
return secondVal;
}
public void setSecondVal(int secondVal) {
this.secondVal = secondVal;
}
}
public Main()
{
this.pair=new ArrayList<Point>();
this.vMap=new ArrayList<Point>();
init();
}
//进行初始化
public void init()
{
this.pair.clear();
this.vMap.clear();
this.iPos=1;
this.iCount=0;
this.iParam=0;
this.iWidth=0;
this.iNum=0;
}
public void acm1009()
{
Scanner scan=new Scanner(System.in);
iWidth=scan.nextInt();
iNum=0;
while(iWidth!=0){
iParam=scan.nextInt();
iCount=scan.nextInt();
while(iParam!=0||iCount!=0)
{
this.pair.add(new Point(iParam,iCount));
iNum+=iCount;
iParam=scan.nextInt();
iCount=scan.nextInt();
}
calPixel();
//对于vMap按照iPos从小到大进行排序
sort();
//输出结果
System.out.println(iWidth);
int iCur=0;
int i;
for(i=0;i<this.vMap.size();i++)
{
if(this.vMap.get(i).secondVal==this.vMap.get(iCur).secondVal)
{
continue;
}
System.out.println(this.vMap.get(iCur).getSecondVal()+" "+(this.vMap.get(i).firstVal-this.vMap.get(iCur).firstVal));
iCur=i;
}
System.out.println(this.vMap.get(iCur).getSecondVal()+" "+(iNum-this.vMap.get(iCur).getFirstVal()+1));
System.out.println("0 0");
//清空,并重新开始进行计算
init();
iWidth=scan.nextInt();
}
System.out.println(0);
}
//冒泡排序
public void sort()
{
for(int i=0;i<this.vMap.size()-1;i++)
{
for(int j=0;j<this.vMap.size()-i-1;j++)
{
if(this.vMap.get(j).getFirstVal()>this.vMap.get(j+1).getFirstVal())
{
int temp=this.vMap.get(j).getFirstVal();
int temp1=this.vMap.get(j).getSecondVal();
this.vMap.get(j).setFirstVal(this.vMap.get(j+1).getFirstVal());
this.vMap.get(j).setSecondVal(this.vMap.get(j+1).getSecondVal());
this.vMap.get(j+1).setFirstVal(temp);
this.vMap.get(j+1).setSecondVal(temp1);
}
}
}
}
//计算像素
public void calPixel()
{
//初始时,位置为1
iPos=1;
//遍历pair,当有一个新的pair时,就证明有值改变了
//我们只计算改变的值影响的周围的节点
for(int i=0;i<this.pair.size();i++)
{
//计算出iPos位置所对应的节点所处的行和列
//行和列均从0开始
int row=(iPos-1)/iWidth;
int col=(iPos-1)%iWidth;
// 此处处理1号点问题
if (col == iWidth - 1)
{
if ((row + 2)*iWidth < iNum)
{
Point tmpPix=new Point(iPos + iWidth+1, calNode(iPos + iWidth + 1, row + 2, 0));
vMap.add(tmpPix);
}
}
//计算被改变的节点所影响的节点
for(int m=row-1;m<=row+1;m++)
{
for(int n=col-1;n<=col+1;n++)
{
int myPos=m*iWidth+n+1;
if(m>=0&&n>=0&&n<iWidth&&myPos<=iNum)
{
Point myPoint=new Point(myPos,calNode(myPos,m,n));
this.vMap.add(myPoint);
}
}
}
iPos+=this.pair.get(i).getSecondVal();
}
}
//计算节点
public int calNode(int iPos,int row,int col)
{
int result=0;
for(int i=row-1;i<=row+1;i++)
{
for(int j=col-1;j<=col+1;j++)
{
int temp=iWidth*i+j+1;
if(temp==iPos)
{
continue;
}
if(i>=0&&j>=0&&j<iWidth&&temp<=iNum)
{
if(Math.abs(getValue(temp)-getValue(iPos))>result)
{
result=Math.abs(getValue(temp)-getValue(iPos));
}
}
}
}
return result;
}//calNode
//获得值
public int getValue(int iPos)
{
int i=0;
int iN=0;
for(i=0;iN<iPos;i++)
{
iN+=this.pair.get(i).getSecondVal();
}
return this.pair.get(i-1).getFirstVal();
}
public static void main(String[] args) throws Exception
{
Main mainf=new Main();
mainf.acm1009();
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator