spj的文件可以是c或cpp编写的程序,编译为spj文件,并设执行权限。

spj.c 或 spj.cc,需编译为spj,执行spj时传3个文件名参数:输入,参考输出,用户输出。

spj的退出值决定判断结果,成功退出(0)表示AC,其余表示WA.

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1449

#include <stdio.h>

char fname[100];
FILE *dat, *diff;

int main(int argc, char **argv){
	int n;
	long long a;
	freopen(argv[3],"r",stdin);
	dat = fopen(argv[1],"r");
	if (!dat) { 
		perror("no .dat file");
		return 1;
   }
	while(fscanf(dat,"%d",&n)==1&&n!=0)
	{
		scanf("%lld",&a);
		if(a%n!=0)
			return 1;
	}
	return 0;
}

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2003

 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
char fname[100];
FILE *inf, *ansf,*outf;

int cmp ( const void *a , const void *b )
{
     return *(int *)a - *(int *)b;
}
 
int main(int argc, char **argv){
    int n,i,count,j;
    int num[302],userdata[302];
    int sum=0,tmp,usrsum=0;
    char no[20];
    char ch;
    inf =  fopen(argv[1], "r");
    ansf = fopen(argv[2], "r");
    outf = fopen(argv[3], "r"); 

    
    fscanf(inf,"%d",&n);
    for(i=0;i<n;i++)
    {
        fscanf(inf,"%d",&num[i]);
        sum+=num[i];
    }
    fscanf(ansf,"%c",&ch);
    if(!(ch>='0'&&ch<='9'))
    {
        fscanf(outf,"%s",no);
        if(strcmp("no",no)==0)
        {   
            printf("OK1\n");
            return 0;
        }
        else
        {    
            printf("NO1\n");
            return 1;
        }
        
    }
    rewind(outf);//重新定位到开头

    count=0;
     while(fscanf(outf,"%d",&tmp)==1)
     {
         userdata[count++]=tmp;
         usrsum+=tmp;
     }

     tmp=0;
     qsort(num,n,sizeof(num[0]),cmp);
     qsort(userdata,count,sizeof(userdata[0]),cmp);
     for(i=0,j=0;j<count||i<n;)
     {
         if(num[i]<userdata[j])
             i++;
         else if(num[i]>userdata[j])
             j++;
        else
         {i++;j++;tmp++;}

     }
     
    if(usrsum==sum/2&&tmp==count)
    {
            printf("OK2\n");
            return 0;

    }
    else
    {    
            printf("NO1\n");
            return 1;
    }
        
}

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1453 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *inf, *outf,*ansf;

char a[10][10],b[10][10],t;
int T;


void ReadD()
{
   int i,j;char s[16];
   for(i=1;i<=9;i++)
   {
      fscanf(inf,"%s",s);
	  for(j=1;j<=9;j++)
		  a[i][j]=s[j-1]-'0';
   }
}


int Check()
{
	int i,j,k,i1,j1;char s[16];
	for(i=1;i<=9;i++)
	{
	  scanf("%s",s);
	  if(strlen(s)!=9)
	     return 1;
	  for(j=1;j<=9;j++)
	  {
         b[i][j]=s[j-1]-'0';
		 if(b[i][j]<1||b[i][j]>9)
			 return 1;
		 if(a[i][j]!=0&&a[i][j]!=b[i][j])
			 return 1;
	  }
	}
	// check in line
	for(i=1;i<=9;i++)
	{
		for(j=1;j<=9;j++) s[j]=0;
		for(j=1;j<=9;j++) 
		{
			if(s[b[i][j]]==1)
			    return 1;
		    else b[i][j]=1;
		}
	}
	// check in column
	for(j=1;j<=9;j++)
	{
		for(i=1;i<=9;i++) s[i]=0;
		for(i=1;i<=9;i++) 
		{
			if(s[b[i][j]]==1)
			    return 1;
		    else b[i][j]=1;
		}
	}
    // check in squares
	for(i=1;i<=9;i+=3)
	{
		for(j=1;j<=9;j+=3) 
		{
			for(k=1;k<=9;k++) s[k]=0;
			for(i1=0;i1<3;i1++)
				for(j1=0;j1<3;j1++)
					if(s[b[i+i1][j+j1]]==1)
                        return 1;
		    else b[i+i1][j+j1]=1;
		}
	}
	return 0;
}

int main(int argc, char* argv[])
{
	
     if(freopen(argv[3],"r",stdin)==NULL)
     { 
           printf("open file error\n");
           return 1;
     }
     inf=fopen(argv[1],"r");
    fscanf(inf,"%d",&T);
    for(t=1;t<=T;t++)
	{
       ReadD();
       if(Check()==1) {printf("error\n");return 1;}
	}
   printf("OK\n");
    return 0;
}


http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1094

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *inf, *outf,*ansf;

typedef struct
{
    int weight, iq;
} datum;                        

datum data[1000], save[1000]; 

int main(int argc, char **argv)
{
	int a,b,N,i;
	int ou[1000];
	char s[100];
	inf =  fopen(argv[1], "r");
	ansf = fopen(argv[2], "r");
    outf = fopen(argv[3], "r"); 

	fscanf(ansf,"%d",&a);
	fscanf(outf,"%d",&b);
	if(a!=b)
	{		
            printf("a!=b");
	    return 1;
        }
	 N = 0;
    while (fgets(s, 100, inf) != NULL)
    {
        sscanf(s, "%d%d", &data[N].weight, &data[N].iq);
         printf( "%d  %d\n", data[N].weight, data[N].iq);
        N++;
    }
       for(i=0;i<b;i++)
          {	fscanf(outf,"%d",&ou[i]);
               printf("%d\n",ou[i]);
          }
	for(i=0;i<b-1;i++)
	{
	 if (data[ou[i]-1].weight>data[ou[i+1]-1].weight||data[ou[i]-1].iq<data[ou[i+1]-1].iq)
	 {
              printf("%d  %d  %d\n",ou[i],data[ou[i]].weight,data[ou[i+1]].weight);
              return 1;}

	}

    printf("OK");

	return 0;
}

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1443

/*
      注:
          (A1 x (A2 x A3))
          本代码并未对其中的x做任何检查。也没有对空格的个数进行检查。
	  答案若是(A1 x (A2 x A3))  用户输出 (A1(A2A3))也算是对的
	  甚至 (A1      (A2*A3))都算是对的。x写成了*
	  所以本代码重在对括号加的位置导致的结果做了检查。
      另外如果是矩阵乘法 导致成的次数超过int 的话,也要该数据。
*/
#include <stdio.h>
#include<iostream>
#include<string.h>
#include<stack>
using namespace std;
char ans[101],user[101];
FILE *inf, *outf,*ansf;
struct Node
{
      int col;
      int row;
}tmp1,tmp2,tmp;
Node data[12];
stack<Node> st;
int N;
int Check(char *base)
{
      int i,k,sum=0;
      int left=0,right=0;
      while(!st.empty()) st.pop();
      for(i=0;base[i]!='\0';i++)
      {
	    if(base[i]=='A') //遇到A就读取后面的数字。并且入数据栈。
	    {
		  sscanf(base+i+1,"%d",&k);
		  st.push(data[k]);
	    }
	    else if(base[i]==')')//遇到右括号就把最上面的二个矩阵相乘,得到新的矩阵入栈
	    {
                   tmp1=st.top();   st.pop();
		   tmp2=st.top();   st.pop();
                   tmp.row=tmp1.row;
		   tmp.col=tmp2.col;
		   st.push(tmp);
		   sum+=tmp1.row*tmp1.col*tmp2.col;
		   right++;
	    }
	    else if(base[i]=='(') left++;
      }
      if(left!=right) return -1;//防止括号个数不匹配。返回-1肯定与标准答案不相等
      return sum;
}
int main(int argc, char **argv)
{
      bool F=false;
      inf =  fopen(argv[1], "r");   //测试数据输入文件
      ansf = fopen(argv[2], "r");   //标准答案文件
      outf = fopen(argv[3], "r");   //用户输出的文件
      if (!inf || !ansf || !outf)
      {
	    perror("no .dat file");
	    return 1;
      }
      int sum1,sum2,i;
      while(fscanf(inf,"%d",&N)&&N)
      {
	    for(i=1;i<=N;i++)
	    {
		  fscanf(inf,"%d%d",&data[i].row,&data[i].col);//输入测试数据
	    }
	    fgets(ans,101,ansf);
	    fgets(user,101,outf);
	    for(i=0;;i++)
	    {
		  if(ans[i]!=user[i])  return 1;//比较前面的 Case i: ( .到第一个左括号为止
		  if(ans[i]=='(') break;
	    }
        sum1=Check(ans+i);  //求已经存好了的一组标准答案的解
	    sum2=Check(user+i); //求用户程序的解
	    if(sum1!=sum2) return 1;//不相等还回1 ,否则 0


      }
      printf("0");
      return 0;
}




http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1198

#include <stdio.h> 
#include<iostream>
#include<string.h>
using namespace std;
FILE *inf, *outf,*ansf;  
char sa[101][31],sb[101][31],ans[101*32],sout[101*32],str[101][31];
int main(int argc, char **argv)
{ 
      inf =  fopen(argv[1], "r");   //测试数据输入文件 
      ansf = fopen(argv[2], "r");   //标准答案文件
      outf = fopen(argv[3], "r");   //用户输出的文件
      if (!inf || !ansf || !outf)
      {    
	    perror("no .dat file");    
	    return 1;   
      } 
      int lena=0,lenb=0,lenout=0,lenans=0;
      while(fscanf(inf,"%s",sa[lena++])!=EOF)
      {
             while(fscanf(inf,"%s",sa[lena])&& sa[lena][0]!='#')lena++;//读测试数据
	     while(fscanf(inf,"%s",sb[lenb])&& sb[lenb][0]!='#')lenb++;
             fgets(ans,101*32,ansf);  //读标准答案
	     fgets(sout,101*32,outf);//读用户的答案

	     int i,j,k;
	     for(i=0;ans[i]!='\0';i++)
		   if(ans[i]==' ') lenans++;
	     for(i=0;sout[i]!='\0';i++) 
		   if(sout[i]==' ')lenout++;
	     if(lenans!=lenout) return 1;//空格数相同说明单词个数相同
             k=0;j=0;
             for(i=0;sout[i]!='\0';i++) //用户的输出标准化
	     {
		   if(sout[i]==' ') {str[k][j]='\0';j=0;k++;continue;}
		   str[k][j++]=sout[i];
	     }
	     str[k][j-1]='\0';//fgets读文件会把回车读了,而不是抛弃
	     k=0;
	     for(i=0;i<lena;i++)
	     {
                    if(!strcmp(sa[i],str[k]) && strlen(sa[i])==strlen(str[k]) )  k++;
		    if(k==lenans+1) break;
	     }
	     if(k!=lenans+1) return 1;
	     k=0;
	     for(i=0;i<lenb;i++)
	     {
		   if(!strcmp(sb[i],str[k]) && strlen(sb[i])==strlen(str[k]) ) k++;
		   if(k==lenans+1) break;
	     }
	     if(k!=lenans+1) return 1;
	     lena=0,lenb=0,lenout=0,lenans=0;
      }
      return 0; 
}


http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1456

#include <stdio.h> 
#include<string.h>
#define MN 1001
FILE *inf, *outf,*ansf;  
char Table[MN][MN],tmp[MN*2];
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
int main(int argc, char **argv)
{
      int i,j,len;
      inf =  fopen(argv[1], "r");   //测试数据输入文件 
      outf = fopen(argv[3], "r");   //用户输出的文件
      if (!inf || !outf)
      {    
	    perror("no .dat file");    
	    return 1;   
      } 
      int L,C,W,l,c,d;
      char s[5];
      fscanf(inf,"%d%d%d",&L,&C,&W);
      for(i=0;i<L;i++)
           fscanf(inf,"%s",Table[i]);
      for(j=0;j<W;j++)
      {
	    fscanf(inf,"%s",tmp);
	    len=strlen(tmp);
	    fscanf(outf,"%d%d%s",&l,&c,s);
	    d=s[0]-'A';
	    for(i=0;i<len;i++)
	    {
		  if(l>=L||c>=C||l<0||c<0) return 1;
                  if(Table[l][c]!=tmp[i]) return 1;
		  l+=dir[d][0];
		  c+=dir[d][1];
	    }
      }
      return 0; 
}

 

发表评论

电子邮件地址不会被公开。

Post Navigation