综合
发布于2020年2月20日 15:49
阅读数 271.9k
同学们首先要知道DreamJudge返回的结果分别代表了什么意思
- Accepted:答案正确,恭喜你正确通过了这道题目。
- Wrong Answer: 答案错误,出现这个错误的原因一般是你的程序实现或思路出现了问题,或者数据范围边界没有考虑到。
- Runtime Error:运行时错误,出现这个错误的原因一般是数组越界或者递归过深导致栈溢出。
- Presentation Error:输出格式错误 ,出现这个错误的原因一般是末尾多了或少了空格,多了或少了换行
- Time Limit Exceeded:程序运行超时,出现这个错误的原因一般是你的算法不够优秀,导致程序运行时间过长。
- Memory Limit Exceeded:运行内存超限,出现这个错误的原因一般是你的程序申请太大了空间,超过了题目规定的空间大小。
- Output Limit Exceeded:输出超限,出现这个错误的原因一般是你的程序输出内容超过了题目答案长度的2倍以上,一般情况是忘记注释掉调试信息。
- Compile Error:编译错误,这个不用说了吧,就是你的代码存在语法错误,检查一下是不是选择错误的语言提交了。
- Submitting:提交中,请等待题目结果的返回,一般情况马上就能反馈结果。如果10秒后还没反馈结果,建议去提交状态里看看。
新手经常会问一个问题:为什么我在自己的电脑上能够通过题目的样例数据测试,但是提交上去却告诉我Wrong Answer?
这是一个显而易见的问题,比如一道题让你求N!
你自己测试输入1,2,3,4答案都没问题,但是很多人会忘记测试输入0, 而0!=1。
即当你Wrong Answer的时候就是说会有一些你没考虑完全的输入导致错误产生。
建议点击题目标题旁边的查看答案或题解和正确通过的代码比较一下,看什么情况下的数据输入和正确答案不一样。
如果才能将代码修改正确并通过题目?
1、根据不同的返回结果去对应检查修改自己的代码
2、点击查看答案,查看其他同学的正确通过的代码
3、将自己的代码和正确的代码同时运行然后比较多组测试数据,看看哪里不一致,再排除错误原因。
对数器让你从菜鸟变成...
登录后发布评论
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
int n=Integer.parseInt(sc.nextLine());
ArrayList<String> list=new ArrayList<>();
while(n>0){
String s=sc.nextLine();
if(s.isEmpty()||s.equals("stop")) break;
list.add(s);
n--;
}
if(list.size()<=1){
System.out.println(list.get(0));
break;
}
list.sort((a,b)->{
return a.length()-b.length();
});
for(String s:list){
System.out.println(s);
}
}
}
}
s1261 为什么不对
#include <iostream>
#include <vector>
using namespace std;
int main(){
int a,b;
scanf("%d %d",&a,&b);
vector<int> cur;
for(int i=a;i<=b;i++){
if(i==1){
continue;
}
int flag=0;
for(int j=2;j<i;j++){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
cur.push_back(i);
}
}
int k=cur.size();
int count=1;
int p=0;
for(int i=1;i<k;i++){
int q=cur[i]-cur[i-1];
if(p==q){
count++;
if(count>=2&&i==k-1){
for(int j=i-count;j<=i;j++){
printf("%d ",cur[j]);
}
printf("\n");
count=1;
}
}
else{
p=q;
if(count>=2){
for(int j=i-1-count;j<=i-1;j++){
printf("%d ",cur[j]);
}
printf("\n");
count=1;
}
}
}
return 0;
},1491题我执行这个代码测试用例我的输出和答案一样啊,为什么会显示wrong
1279题答案有一个测试用例为什么没有\,示例错了吗
简单背包问题代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(int a,int b){
return a>b;
}
int main(){
int s,n;
while(scanf("%d %d",&s,&n)!=EOF){
vector<int> wei(n);
for(int i=0;i<n;i++){
scanf("%d",&wei[i]);
}
sort(wei.begin(),wei.end(),compare);
bool flag=false;
for(int i=0;i<n;i++){
vector<int> dp(n);
dp[i]=s-wei[i];
for(int j=i+1;j<n;j++){
if(dp[j-1]>=wei[j]){
dp[j]=dp[j-1]-wei[j];
if(dp[j]==0){
flag=true;
break;
}
}
else{
dp[j]=dp[j-1];
}
}
if(flag==true){
break;
}
}
if(flag==true){
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}
输入
53 7
14 14 1 10 19 9 6我的结果应该是YES,答案判我的结果为no,答案有问题
前者runtime error后者AC,1218题号,基本是一致的,不知道什么原因,求解答
前:
#include <stdio.h>
int main(){
int n,top,bottom,left,right,i,j,num=1;
scanf("%d",&n);
int a[20][20]={0};
top = 0;
bottom = n-1 ;
left = 0 ;
right = n-1 ;
while(num<=n*n)
{
for(i =top;i<=bottom&&num<=n*n;i++)
{
a[i][left]=num;
num++;
}
left++;
for(i=left;i<=right&&num<=n*n;i++)
{
a[bottom][i]=num;
num++;
}
bottom--;
for(i=bottom;i>=top&& num <= n*n;i++)
{
a[i][right]=num;
num++;
}
right-- ;
for(i=right;i>=left&&num<=n*n;i--)
{
a[top][i]=num;
num++;
}
top++;
}
for( i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%-3d ",a[i][j]);
}
printf("\n");
}
return 0;
}
后:
#include<stdio.h>
int main()
{
int i,j,n,count = 1;
scanf("%d",&n);
int l,r,b,t;
int num[20][20] = {0};
t = 0;//上边界起点 行
l = 0;//左边界起点 列
b = n - 1;//下边界起点 行
r = n - 1;//右边界起点 列
while(count <= n*n)
{
for(i = t;i <= b && count <= n*n;i++)
{
num[i][l] = count;
count++;
}//从上到下递增
l++;
for(i = l; i <= r && count <= n*n;i++)
{
num[b][i] = count;
count++;
}//从左向右
b--;
for(i = b;i >= t && count <= n*n;i--)
{
num[i][r] = count;
count++;
}//从下向上
r--;
for(i = r;i >= l && count <= n*n;i--)
{
num[t][i] = count;
count++;
}//从右向左
t++;
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%-3d ",num[i][j]);
}
printf("\n");
}
return 0;
}
求助题号1098前缀字符串,vs上运行正确,提交时显示答案错误,不知道为啥
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
if (n == 0)break;
string s[100];
int count = 0;
for (int i = 0; i < n; i++)cin >> s[i];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j && s[j].find(s[i])!=-1) {
count++;
break;
}
}
}
cout << n - count << endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,c;
while(scanf("%d%d",&n,&c)!=EOF){
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
double r=c/2;
int count=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
double x=abs(a[i]-a[j]);
double y=abs(a[i]-a[k]);
double z=abs(a[j]-a[k]);
if(x<r&&y<r&&z<r) count++;
}
}
}
printf("%d\n",count);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
int s[n];
for(int i=0;i<n;i++){
scanf("%d",&s[i]);
}
int sum;
for(int i=0;i<n;i++){
sum=0;
for(int j=0;j<n;j++){
if(s[j]==s[i]) sum++;
}
sum--;
if(sum==0) printf("BeiJu\n");
else printf("%d\n",sum);
}
return 0;
}
题号2021求助,代码可以在VScode上通过,但在这显示Compilation Error
#include <iostream>
#include<bits/stdc++.h>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, int>mp;
int n;
while (cin >> n) {
for (int i = 0; i < n; i++) {
int b;
cin >> b;
mp[b]++;
}
unordered_map<int, int>::iterator it;
for (it = mp.begin(); it != mp.end(); it++) {
cout << it->first << " ";
}
cout << endl;
}
return 0;
}
题号2011Compile Error,devcpp可以编译
#include<iostream>
#include<cctype>
#include<algorithm>
#include<regex>
using namespace std;
int main(){
string input;
getline(cin,input);
regex pattern("tantan",regex::icase);
bool found=regex_search(input,pattern);
if(found){
string result=regex_replace(input,pattern,"baibai");
transform(result.begin(),result.end(),result.begin(),::tolower);
cout<<result;
}else{
cout<<"not find";
}
return 0;
}
题号1491求助,显示runtime error,输入样例输出显示为空,但在Vscode上能够正常输出正确结果
#include <iostream>
#include <math.h>
using namespace std;
bool isPrime(int t);
int main(){
int a,b,count,start=0;
int medium=1;
int end=2;
bool flag=false;
cin>>a>>b;
int *Prime=new int[10000];
if(a>b){
swap(a,b);
}
for(int i=a;i<=b;i++){
if(isPrime(i)==true){
Prime[count]=i;
count++;
}
if(Prime[0]==1){
for(int i=0;i<=count;i++){
Prime[i]=Prime[i+1];
}
}
}
while(end<=count){
int num=Prime[medium]-Prime[start];
while(Prime[end]-Prime[medium]==num){
flag=true;
medium++;
end++;
}
if(flag==true){
for(int i=start;i<=medium;i++){
if(medium-start>=2){
cout<<Prime[i]<<" ";
if(i==medium){
cout<<endl;
}
}
}
start=medium;
medium=start+1;
end=medium+1;
}
else{
start++;
medium++;
end++;
}
}
delete Prime;
}
bool isPrime(int t){
bool result=true;
for(int i=2;i<=sqrt(t);i++){
if(t%i==0){
result=false;
break;
}
}
return result;
}
求助,显示runtime error 正确率50%。题号1472
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[105][105]={0};
int d;
scanf("%d",&d);
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j++){
scanf("%d",&a[i][j]);
}
}
if(d == 1){
for(int j=1; j<=4; j++){
for(int i = 1; i <= 3; i++){
if(a[i][j]!=0 && a[i][j]==a[i+1][j]){
a[i][j]*=2;
a[i+1][j]=0;
i++;
}
}
}
for(int j=1; j<=4; j++){
int cnt=1;
for(int i=1; i<=4; i++){
if(a[i][j] != 0){
int temp = a[i][j];
a[i][j] = 0;
a[cnt][j]=temp;
cnt++;
}
}
}
}
else if(d==2){
for(int j=1; j<=4; j++){
for(int i = 4; i >= 2; i--){
if(a[i][j]!=0 && a[i][j]==a[i-1][j]){
a[i][j]*=2;
a[i-1][j]=0;
i--;
}
}
}
for(int j=1; j<=4; j++){
int cnt=4;
for(int i=4; i>=1; i--){
if(a[i][j] != 0){
int temp = a[i][j];
a[i][j] = 0;
a[cnt][j]=temp;
cnt--;
}
}
}
}
else if(d==3){
for(int i=1; i<=4; i++){
for(int j = 1; j <= 3; j++){
if(a[i][j]!=0 && a[i][j]==a[i][j+1]){
a[i][j]*=2;
a[i][j+1]=0;
j++;
}
}
for(int i=1; i<=4; i++){
int cnt=1;
for(int j=1; j<=4; j++){
if(a[i][j] != 0){
int temp = a[i][j];
a[i][j] = 0;
a[i][cnt]=temp;
cnt++;
}
}
}
}
}
else{
for(int i=1; i<=4; i++){
for(int j = 4; j >= 2; j--){
if(a[i][j]!=0 && a[i][j]==a[i][j-1]){
a[i][j]*=2;
a[i][j-1]=0;
j++;
}
}
}
for(int i=1; i<=4; i++){
int cnt=4;
for(int j=4; j>=1; j++){
if(a[i][j] != 0){
int temp = a[i][j];
a[i][j] = 0;
a[i][cnt]=temp;
cnt--;
}
}
}
}
for(int i = 1; i <= 4; i++){
for(int j=1; j<=4; j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
求助,这个题目明明结果都正确呀,结果只有50%,题号1151
#include <bits/stdc++.h>
#include <string>
using namespace std;
struct student{
string a;
int b;
};
bool cmp(student x,student y){
return x.b>y.b;
}
bool cmp_big(student x,student y){
return x.b<y.b;
}
student a[200];
int main() {
int x,n;
while(cin>>x){
cin>>n;
for(int i=0;i<x;i++){
cin>>a[i].a>>a[i].b;
}
if(n==1)sort(a,a+x,cmp_big);
else sort(a,a+x,cmp);
for(int i=0;i<x;i++){
cout<<a[i].a<<' '<<a[i].b<<endl;
}
}
return 0;
}
求助这个通过率只有75%,哪里出了问题,题号1312
#include<bits/stdc++.h>
using namespace std;
int fa[10001];
typedef struct edge {
int s, t;
int cost;
}edge;
edge e[10001];
bool compare(edge e1, edge e2) {
return e1.cost < e2.cost ? 1 : 0;
}
int find(int x) {
if(x != fa[x]) fa[x] = find(fa[x]);
return fa[x];
}
void unity(int x, int y) {
fa[find(x)] = find(y);
}
int main() {
int n;
while(cin>>n) {
if(n == 0) break;
else {
int m, ans, cnt;
ans = 0;
cnt = 0;
cin>>m;
for(int i = 0; i <= m; i++) fa[i] = i;
for(int i = 1; i <= n; i++) {
cin>>e[i].s>>e[i].t>>e[i].cost;
}
sort(e, e + n, compare);
for(int i = 1; i <= n; i++) {
if(find(e[i].s) != find(e[i].t)) {
unity(e[i].s, e[i].t);
ans += e[i].cost;
}
}
for(int i = 1; i <= m; i++) {
if(fa[i] == i) cnt++;
}
if(cnt == 1) {
cout<<ans<<endl;
}
else cout<<"?"<<endl;
}
}
}
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[10];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(a[i]==a[j]){
int b=j;
while(b<n){
a[b]=a[++b];
}
}
}
}
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
}
system("pause");
return 0;
}
求助p1334最大连续子序列
明明用例都过,就只有75%通过,实在不知道哪个地方缺失了约束
#include<stdio.h>
#include<stdlib.h>
int main()
{
int N;
int *p = NULL;
int i,j;
while(scanf("%d",&N)!=EOF)
{
int max_sum = 0;
int this_sum = 0;
int max_sum1 = 0;
int count = 0;
p = (int *)malloc(sizeof(int)*N);
getchar();
for(i=0;i<N;i++)
{
scanf("%d",&p[i]);
}
max_sum = p[0];
max_sum1 = p[0];
for(i=0;i<N;i++)
{
this_sum = this_sum+p[i];
if(this_sum<0)
{
this_sum = 0;
count++;
}
if(this_sum>max_sum)
max_sum = this_sum;
}
if(count==N)
{
for(i=0;i<N;i++)
{
if(p[i]>max_sum1)
max_sum1 = p[i];
}
printf("%d\n",max_sum1);
}
else
printf("%d\n",max_sum);
free(p);
}
return 0;
}
求助p1334最大连续子序列
明明用例都过,就只有75%通过,蒟蒻求救
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
while (cin >> n) {
//结束判断
if (n == 0) {
cout <<0<<" "<<0<<" "<<0<< endl;
break;
}
//全负标志
int flag = 0;
int arr[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
//判断是否非负
if (arr[i] > 0) {
flag = 1;
}
}
//全负输出
if (flag == 0) {
cout << 0 << " " << arr[0] << " " << arr[n - 1] << endl;
continue;
}
//非全负
int dp[n];
dp[0] = arr[0];
int maxx = 0;
int e = 0;
//only one elem
if (n == 1) {
cout << arr[0] << " " << arr[0] << " " << arr[0] << endl;
continue;
}
for (int i = 1; i < n; i++) {
if (dp[i - 1] > 0) {
dp[i] = arr[i] + dp[i - 1];
} else {
dp[i] = arr[i];
}
if (dp[i] > maxx) {
e = i;
}
maxx = max(maxx, dp[i]);
}
int s = e;
int tmp = maxx;
while (tmp != 0) {
tmp -= arr[s--];
}
cout << maxx << " " << arr[s + 1] << " " << arr[e] << endl;
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main(){
char s[10];
scanf("%s",s);
int i,sum=0,len=strlen(s);
for(i=2;i<len;i++){
sum=sum*16;
if(s[i]>='0'&&s[i]<='9'){
sum+=s[i]-'0';
}
if(s[i]>='a'&&s[i]<='f'){
sum+=(s[i]-'a'+10);
}
if(s[i]>='A'&&s[i]<='F'){
sum+=(s[i]-'A'+10);
}
}
printf("%d\n",sum);
return 0;
}
十六进制转十进制 通过率只有50%什么原因
题目是1296,数据通过率33%
#include <bits/stdc++.h>
using namespace std;
stack<int> st;
int main(){
char s[105],ans[105]={'\0'};
while(cin>>s){
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='('){
//将左括号的位置压入栈中而不是左括号
st.push(i);
ans[i]=' ';
}
else if(s[i]==')'){
if(!st.empty()){
st.pop();
ans[i]=' ';
}else
ans[i]='?';
}
else
ans[i]=' ';
}
int k;
while(!st.empty()){
k=st.top();
ans[k]='$';
st.pop();
}
cout<<s<<endl;
cout<<ans<<endl;
}
return 0;
}
下面这个通过率只有50%是怎么回事呀,题目是1259
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[1005];
while(gets(s)){
int ans=0;
int len=strlen(s);
for(int i=2;i<len;i++){
ans*=16;
if(s[i]>='0'&&s[i]<='9')
ans+=(s[i]-'0');
else
ans+=(s[i]-'A')+10;
}
cout<<ans<<endl;
}
return 0;
}
为啥数据通过率只有60%
#include <iostream>
using namespace std;
int main()
{
//==========================================代码展示(1):====================================
/*int a[105][105];
int b[105][105];
int i,j,k,n; //输入一个n行m列的矩阵
scanf("%d %d",&n,&k);
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
b[j][k-i+1]=a[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
我这个和你视频敲的一样的,一个矩阵顺时针旋转90度,为什么我的就错了呢?
请问为啥错误数据对比是一样的还是报Presentation Error呢?
想问下Python能引用第三方库吗,我试了下,然后就Runtime Error了
请问http://www.noobdream.com/DreamJudge/Issue/page/1647/你们这个题是不是样例有问题啊,我做了好久都是只过了50%,参考了网上很多版本的当年答案也都是只过了50%,包括当年已经上岸的学生。而且这个题没有题解,也不知道到底怎么样才能过,如果确定样例没问题可以给一个参考代码吗?2019年我就这一个题没过了,而且还是第一题最简单的一个,我都快怀疑人生了
怎么我在DEV就能运行出来,交到这上面就编译错误呢?