A. Co-prime Array
题意:给你一个数列,要求构造两两相邻之间的数互质的数列,可以插入的数的小于10的9次方
思路:其实可以选择靠近10的9次方的最大的三个素数、然后按我下面的方法做就可以了,我这里选的三个素数不是最大的,数据有点水,就水过了
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 const int qq=1005; 5 int num[qq]; 6 int ar[qq<<1]; 7 int gcd(int x,int y) 8 { 9 return y==0?x:gcd(y,x%y); 10 } 11 int main() 12 { 13 int n;scanf("%d",&n); 14 for(int i=0;i<n;++i) 15 scanf("%d",&num[i]); 16 int c[3]={9997747,9996739,9999749}; 17 ar[0]=num[0]; 18 int k=1; 19 for(int i=1;i<n;++i){ 20 int ans; 21 int x=num[i]; 22 int y=ar[k-1]; 23 if(x>y) ans=gcd(x,y); 24 else ans=gcd(y,x); 25 if(ans==1) ar[k++]=x; 26 else{ 27 for(int j=0;j<3;++j){ 28 if(c[j]%x!=0&&c[j]%y!=0){ 29 ar[k++]=c[j]; 30 break; 31 } 32 } 33 ar[k++]=x; 34 } 35 } 36 printf("%d\n",k-n); 37 for(int i=0;i<k;++i) 38 printf("%d ",ar[i]); 39 printf("\n"); 40 }
B. Seating On Bus
题意:这题就纯粹考英语了,读懂了就so easy,大概是说人去做公交车会先选择靠窗的位置坐下,靠窗的坐完了然后才会做靠近走廊的位置,途中也给出了座位标号的顺序,但是这里要求输出的顺序就不一样了, 要求比如一行的编号是 1 19 20 2 如果都有人的话输出的循序就是 19 1 20 2、
思路:先标记能坐多少人,然后按给定的输出顺序判断这地方有没有坐人就ok了
1 #include<iostream> 2 #include<cstdio> 3 const int qq=1005; 4 int num[qq]={0}; 5 int main() 6 { 7 int n,m; 8 scanf("%d%d",&n,&m); 9 for(int i=1;i<=m;++i) 10 num[i]=1; 11 int fir=n*2+1,sec=n*2+2; 12 for(int i=1;i<=(n<<2);++i){ 13 if(i%4==1){ 14 if(num[fir]) printf("%d ",fir); 15 } 16 else if(i%4==2) { 17 if(num[fir-2*n]) printf("%d ",fir-2*n); 18 } 19 else if(i%4==3){ 20 if(num[sec]) printf("%d ",sec); 21 } 22 else if(i%4==0){ 23 if(num[sec-2*n]) printf("%d ",sec-2*n); 24 } 25 if(i%4==0){ 26 fir=fir+2; 27 sec=sec+2; 28 } 29 } 30 printf("\n"); 31 }
时间: 2024-10-12 15:56:14