找BUG求助

SharonL29

2024-03-26 16:21:10

K12 Study

请问哪位大神愿意帮我找BUG,如果你已经找到BUG了,请私信我,谢谢。

注意题号是一本通题号。

  1. 1211:判断元素是否存在 40

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int n,k;
    int a[100005];
    int cc(int x)
    {
    if(a[x]!=0)return a[x];
    if(x==n)return a[x]=1;
    else if(x<n||x<0)return -1;
    else 
    {
        x=x-1;   
        int b=0;
        if(x%2==0&&cc(x/2)==1)return a[x+1]=1;
        if(x%3==0&&cc(x/3)==1)return a[x+1]=1;
    }
    return a[x+1]=-1;
    }
    int main()
    {
    scanf("%d,%d",&n,&k);
    if(cc(k)==1)printf("YES\n");
    else printf("NO\n");
    return 0;
    }
  2. 1185:单词排序 0

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<map>
    #include<cstring>
    using namespace std;
    int l,n;
    string x,a[105],c;
    map<string,int>mp;
    bool cmp(string a1,string a2)
    {
    if(a1[0]==a2[0])
    {
        int ll=1;
        while(a1[ll]==a2[ll])ll++;
        return a1[ll]<a2[ll];
    }
    else return a1[0]<a2[0];
    }
    int main()
    {
    getline(cin,c);
    //cout<<"input:"<<c<<".\n";
    l=c.size();
    for(int i=0;i<l;i=i+1)
    {
        if(c[i]==' ')
        {
            if((c[i-1]!=' ')&&(mp[x]==0))a[n]=x;
            else if(mp[x]==1)n=n-1;
            //cout<<"n="<<n<<",x="<<x<<".\n";
            mp[x]=1;
            x="";
        }
        else 
        {
            if(c[i-1]==' ')n=n+1;
            x=x+c[i];
        }
    }
    if(mp[x]==0)a[n]=x;
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i=i+1)cout<<a[i]<<"\n";
    return 0;
    }
  3. 1309:回文数(Noip1999) 0

    #include<cstdio>
    #include<iostream>
    using namespace std;
    /*bool huiwen(unsigned long long n)
    {
    if(n/10==0)return true;
    else if(hink(n)==n)return true;
    else return false;
    }*/
    unsigned long long hink(unsigned long long a)
    {
    int cou=0,b[105]={0};
    unsigned long long c=0,d=1;
    while(a>0)
    {
        b[cou]=a%10;
        cou=cou+1;
        a=a/10;
    }
    for(int i=(cou-1);i>=0;i=i-1)
    {
        c=c+(b[i]*d);
        d=d*10;
    }
    //printf("now,that is %llu.\n",c);
    return c;
    }
    int main()
    {
    unsigned long long sum,m;
    int cnt=-1;
    cin>>m;
    if((m/10==0)||(hink(m)==m))cnt=0;
    else 
    {
        sum=m;
        for(int i=1;i<=30;i=i+1)
        {
            sum=sum+hink(sum);
            if((sum/10==0)||(hink(sum)==sum)==true)
            {
                cnt=i;
                break;
            }
        }
    }
    printf("%d",cnt);
    return 0;
    }
  4. 1175:除以13 0

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int a[105],b[105]={0},c,l=0;
    char ch[105];
    int main()
    {
    while((scanf("%c",&ch[l]))&&(ch[l]!='\n')&&(ch[l]!='\0'))
    {
        a[l]=int(ch[l]-'0');
        l=l+1;
    }
    b[1]=(a[0]*10+a[1])/13;
    c=(a[0]*10+a[1])%13;
    for(int i=2;i<l-1;i=i+1)
    {
        c=(c*10)+a[i];
        b[i]=c/13;
        c=c%13;
    }
    if((c*10+a[l])>13)
    {
        b[l-1]=(c*10+a[l])/13;
        c=c%13;
        l=l+1;
    }
    for(int i=0;i<l-1;i=i+1)printf("%d",b[i]);
    printf("\n%d",c);
    return 0;
    }

可达性统计:题目描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。

输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从xy的一条有向边。

输出格式 输出共 N行,表示每个点能够到达的点的数量。

样例 输入样例

10 10
3 8
2 3
2 5
5 9
5 9
2 3
3 9
4 8
2 10
4 9 

输出样例

1
6
3
3
2
1
1
1
1
1

提示

1≤N,M≤30000

80TLE


[Magic Formation](http://temege.com/p/3088):
Background
SABRINA 被困在魔法阵里了!

Description
SABRINA 手上有一张地图,这张地图由 W 和 _ 组成,W 表示荆棘,`_` 表示空地。
SABRINA 必须准确的说出每个荆棘周围的连通块中的空地的数量和,才能逃出魔法阵!答案对 `10` 取模。

注意属于同一个连通块的只计算一次,当前点需计算在内。

Format
Input
第一行,包含两个整数 `n,m`1<=n,m<=1000 )

接下来 
`n` 行 `m` 列,输入由 `W` 和 `_` 组成的地图。

Output
将答案输出为如上所述的矩阵,参考示例以准确输出的格式。

样例
样例输入 

4 5 WWW WWW _WW W_W_W

样例输出 #1

463 732 _64 5_4_3


0 RE
- #1     Runtime Error Segmentation fault   1ms 540 KiB
- #2     Runtime Error Segmentation fault   2ms 768 KiB
- #3     Runtime Error Bus error    4ms 1 MiB
- #4     Runtime Error Segmentation fault   2ms 1.2 MiB
- #5     Runtime Error Segmentation fault   5ms 1.5 MiB
- #6     Runtime Error Segmentation fault   4ms 1.6 MiB
- #7     Runtime Error Segmentation fault   4ms 1.9 MiB
- #8     Runtime Error Bus error    6ms 2.1 MiB
- #9     Runtime Error Segmentation fault   6ms 2.3 MiB
- #10    Runtime Error Segmentation fault
```cpp
#include<cstdio>
#include<iostream>
#include<map>
#include<vector> 
#include<algorithm>
using namespace std;
int n,m,ans=0,a[1005][1005],cnt;
char c[1005][1005];
vector<int>b;
const int xx[]={-1,-1,-1,0,0,1,1,1},yy[]={-1,0,1,-1,1,-1,0,1};
void dfs(int x,int y)
{
    if(a[x][y]!=0)return;
    if(x<1||x>n||y<1||y>m)return;
    a[x][y]=ans;
    cnt=cnt+1;
    dfs(x+1,y);
    dfs(x-1,y);
    dfs(x,y-1);
    dfs(x,y+1);
}
void find(int x,int y)
{
    int d[10],aa=1,bb[10],l,l2;
    for(int i=0;i<8;i=i+1)
    {
        if(a[x+xx[i]][y+yy[i]]>0)
        {
            d[l]=a[x+xx[i]][y+yy[i]]%10;
            l=l+1;
        }
    }
    sort(d,d+l);
    l2=-1;
    for(int i=0;i<l;i=i+1)
    {
        if(d[i]!=l2)
        {
            l2=d[i];
            aa=aa+b[d[i]];
        }
    }
    printf("%d",aa%10);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i=i+1)
    {
        for(int j=1;j<=m;j=j+1)
        {
            cin>>c[i][j];
            if(c[i][j]=='W')a[i][j]=-1;
        }
    }
    for(int i=1;i<=n;i=i+1)
    {
        for(int j=1;j<=m;j=j+1)
        {
            if(a[i][j]==0)
            {
                ans=ans+1;
                cnt=0;
                dfs(i,j);
                b.push_back(cnt);
            }
        }
    }
    for(int i=1;i<=n;i=i+1)
    {
        for(int j=1;j<=m;j=j+1)
        {
            if(a[i][j]>1)printf("-");
            else find(i,j);
        }
        printf("\n");
    }
}

Rocket: Background SABRINA 的团队要组装火箭。

Description SABRINA 手下有 N个工人,每个工人都可以加工若干个零件,总共要加工 K 个零件,这 K 个零件可以由多个工人来加工。料事如神的 SABRINA 预测第 i 个工人在加工一个零件的时候会 a_i个 地方加工不到位。

因为 SABRINA 很懒,所以她希望知道有多少种方案能使得这 K 个零件加工不到位的地方的数量不超过 Q 个。

两个方案不同当且仅当某个工人加工的零件数不同。

Format Input 第一行包含四个整数 N,K,Q,P

接下来一行 N 个整数 a[i]

Output 一行一个整数,表示方案数对 P 取模后的答案。

样例 样例输入

3 5 6 11
1 2 1

样例输出

0

Limitation 1s, 1024KiB for each test case.

40 WA

Tea Part: Background SABRINA 终于抵达了 Deducci oˊnFiscal 王国。 Deducci oˊnFiscal 王国的街头茶会上有很多甜点。

Description 由于 Deducci oˊ nFiscal 王国除了热衷于 Deducci oˊnFiscal 还喜欢魔方,所以他们用魔方来代替货币!真是优雅的文明(?) Deducci oˊnFiscal 王国上由于物资匮乏,王国上只有有 N 种不同的魔方,第 i 种甜点的价值是 a_i。大富翁 SABRINA 手上每个款式的魔方都有无数张。 因为该王国上的人 (?) 有 K 个手指,所以他们使用的是 K 进制!此外, Deducci oˊ nFiscal 王国上的人都有着崇高的信仰,他们认为数字 P (在 K 进制下) 是 HOLY 的!所以,如果凑出来的魔方的价值在 K 进制中最后一位数字是 P , Deducci oˊ nFiscal 王国的人会很愉快!(愉快的话会免费送你甜点)但不幸的是, SABRINA 忘了 P 是多少!所以, SABRINA 想知道他能凑出的所有可能让 Deducci oˊ nFiscal 王国的人愉快 (然后送她甜点) 的 P 的值。

Format Input 第一行,输入两个整数 n and k (1≤n≤100,000,2≤k≤100,000 )

第二行输入 n 个整数数 a_1 a_2,...a_n(1<=a_i<=10^9)

Output 第一行,输出 SABRINA 可以让 Deducci oˊnFiscal 王国人愉快的 P 值的数量。

第二行,以递增的顺序输出所有这些值。

样例 样例输入

2 8
12 20

样例输出

2
0 4
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,a[100005],l,c[100005],d[100005],sum;
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i=i+1)
    {
        scanf("%d",&a[i]);
        sum=sum+a[i];
        c[i]=a[i]%k;
    }
    for(int i=0;i<k;i=i+1)
    {
        if(sum%k==i)
        {
            l=l+1;
            d[l]=i;
            continue;
        }
        int cnt1=0;
        for(int j=1;j<=n;j=j+1)
        {
            if((cnt1+a[j])%k==i)cnt1=0;
            else cnt1=cnt1+a[j];
        } 
        if(cnt1==0)
        {
            l=l+1;
            d[l]=i;
        }
    }
    printf("%d\n",l);
    for(int i=1;i<=l;i=i+1)printf("%d ",d[i]);
    return 0;
}

Kingdom Test: Background SABRINA 要接受大祭司 LINUXSS 的考验。 Description 已知有一个非负整数 N 可以表示为 10^k=n*p+q,其中p,q是已知参数,且 0≤Q<P≤20000。 SABRINA 要在 1.00s 内说出上式成立且 k 能取得的最小值,否则它将会被赶出 Deducci oˊnFiscal 王国! Format Input 第一行输入一个整数 T 表示数据组数。 接下来 T,每行两个数 P,Q,如题所示。 Output 对于每一组数据,输出一个整数表示答案,无解输出 −1,否则输出 k 样例 样例输入

3
15 10
1937 1213
18899 18779

样例输出

1
5
18

30 WA

#include<cstdio>
#include<iostream>
using namespace std;
int t,p,q,a;
long long pp[20];
void po(int x)
{
    long long ans=1;
    pp[0]=1;
    for(int i=1;i<=18;i=i+1)
    {
        ans=ans*10;
        pp[i]=ans;
    }
    return ;
}
int main()
{
    po(18);
    scanf("%d",&t);
    for(int i=1;i<=t;i=i+1)
    {
        int bj=0;
        scanf("%d%d",&p,&q);
        for(int j=1;j<=18;j=j+1)
        {
            if((pp[j]-q)%p==0)
            {
                printf("%d\n",j);
                bj=1;
                break;
            }
        }
        if(bj==0)printf("-1\n");
    }
}