fork download
  1. #include<stdio.h>
  2. int n, m;
  3. int a[509];
  4. struct A{
  5. int type;
  6. int a[509];
  7. } b[509];
  8. bool c[509];
  9. char tmp[509];
  10. int res[509];
  11. int rl;
  12. int checkValid(int bi)
  13. {
  14. int i, j, k;
  15. int res=0;
  16. if(c[bi])return res;
  17. if(b[bi].type == 1){
  18. for(i=0;i<n;i++){
  19. if(b[bi].a[i] == 1)
  20. {
  21. if(a[i] == 0)
  22. return 0;
  23. else if(a[i]==1)
  24. res++;
  25.  
  26. }
  27. }
  28. return res;
  29. }
  30. else{
  31. for(i=0;i<n;i++){
  32. if(b[bi].a[i] == 1)
  33. {
  34. if(a[i] == 1)
  35. return 0;
  36. else if(a[i]==0)
  37. res++;
  38. }
  39. }
  40. return res;
  41. }
  42. }
  43. int main()
  44. {
  45. int i, j, k;
  46. scanf("%d %d",&n,&m);
  47. scanf("%s",tmp);
  48. for(i=0;i<n;i++){
  49. a[i] = tmp[i]-'0';
  50. }
  51. for(i=0;i<m;i++){
  52. scanf("%d",&b[i].type);
  53. scanf("%s",tmp);
  54. for(j=0;j<n;j++){
  55. b[i].a[j] = tmp[j]-'0';
  56. }
  57. }
  58. rl=0;
  59. bool valid = true;
  60. while(rl<500)
  61. {
  62. for(i=0;i<n;i++){
  63. if(a[i] == 1)break;
  64. }
  65. if(i==n){
  66. break;
  67. }
  68. int ri=-1;
  69. int rt=0;
  70. for(i=0;i<m;i++){
  71. int tt=checkValid(i);
  72. if(rt<tt){
  73. rt=tt;
  74. ri=i;
  75. }
  76. }
  77. if(ri>=0){
  78. {
  79. res[rl++] = ri;
  80. for(i=0;i<n;i++){
  81. if(b[ri].a[i]==1&&a[i]==b[ri].type)
  82. a[i]=2;
  83. }
  84. c[ri]=true;
  85. continue;
  86. }
  87. }
  88. {
  89. valid = false;
  90. break;
  91. }
  92. }
  93. if(valid){
  94. printf("YES\n");
  95. printf("%d\n",rl);
  96. for(i=rl-1;i>=0;i--){
  97. printf("%d ",res[i]+1);
  98. }
  99. }
  100. else{
  101. printf("NO\n");
  102. }
  103. }
Success #stdin #stdout 0.01s 5288KB
stdin
3 1
111
1 110
stdout
NO