SharonL29
2024-03-26 16:21:10
请问哪位大神愿意帮我找BUG,如果你已经找到BUG了,请私信我,谢谢。
注意题号是一本通题号。
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;
}
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;
}
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;
}
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
,表示从x
到y
的一条有向边。
输出格式
输出共
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
#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
using namespace std;
int n,m,b[30005],cnt;
vector<int>g[30005];
void dfs(int x)
{
if(b[x]==1)return;
b[x]=1;
cnt=cnt+1;
for(int i=0;i<g[x].size();i=i+1)dfs(g[x][i]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i=i+1)
{
int x,y;
scanf("%d%d",&x,&y);
g[x].push_back(y);
}
for(int i=1;i<=n;i=i+1)
{
memset(b,0,sizeof(b));
cnt=0;
dfs(i);
printf("%d\n",cnt);
}
return 0;
}
[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
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int n,k,q,p,a[100005],c[100005],cnt=0;
void dfs(int x,int y,int z)
{
if(y==k)
{
if(z<=q)cnt=cnt+1;
return ;
}
if(x>n||y>k||z>=q)return;
for(int i=x;i<=n;i=i+1)
{
for(int j=k-y;j>=0;j=j-1)
{
if(z+j*a[i]<q)dfs(i+1,j+y,z+j*a[i]);
else break;
}
}
return;
}
int main()
{
scanf("%d%d%d%d",&n,&k,&q,&p);
for(int i=1;i<=n;i=i+1)
{
scanf("%d",&a[i]);
if(a[i]*k<=q)cnt=cnt+1;
}
sort(a+1,a+n+1);
dfs(1,0,0);
printf("%d\n",cnt%p);
return 0;
}
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");
}
}