逆天无cout!!

P1047 [NOIP2005 普及组] 校门外的树

void_AC @ 2024-03-30 10:33:35

#include <bits/stdc++.h>
using namespace std;
int m,l,all=0,u[100],v[100];
bool a[1000] = {false};
int main(){
    cin >> l >> m;
    for(int i=0; i<m; i++){
        cin >> u[i] >> v[i];
    }for(int i=0; i<m; i++){
        for(int j=u[i]; i<v[i]; j++){
            if(a[j] == false){
                a[j] = true;
            }if(a[j] == true){
                a[j] = false;
            }
        }
    }for(int i=0; i<l; i++){
        if(a[i] == true){
            all++;
        }
    }cout<<all<<endl;
    return 0;
}

没有死循环; 没有编译死; 可能没有TLE(bushi;


by wangbinfeng @ 2024-03-30 10:46:02

如果你要求助,请说人类能理解的话1

否则,wyy请删帖……


by void_AC @ 2024-03-30 11:00:04

@wangbinfeng cout是输出耶!! 没输出!!


by masonxiong @ 2024-03-30 11:00:48

@lmh0416 请说人话谢谢


by weitianjian @ 2024-03-30 11:03:41

 for(int j=u[i]; /*i<v[i]*/; j++){

改为 j<v[i] ,死循环


by weitianjian @ 2024-03-30 11:04:26

emm,不过你可能理解错题意了


by weitianjian @ 2024-03-30 11:06:34

输出为0,因为

 if(a[j] == false){
   a[j] = true;
 }if(a[j] == true){
    a[j] = false;
 }

会使数组中永远全部为 false


by void_AC @ 2024-03-30 11:19:12

#include <bits/stdc++.h>
using namespace std;
int m,l,all=0,u[100],v[100];
bool a[1000] = {false};
int main(){
    cin >> l >> m;
    for(int i=0; i<m; i++){
        cin >> u[i] >> v[i];
    }for(int i=0; i<m; i++){
        for(int j=u[i]; i<v[i]; j++){
            if(a[j] == false){
                a[j] = true;
                break;
            }if(a[j] == true){
                a[j] = false;
                break;
            }
        }
    }for(int i=0; i<l; i++){
        if(a[i] == true){
            all++;
        }
    }cout<<all<<endl;
    return 0;
}

改进了,但仍有BUG


by weitianjian @ 2024-03-30 11:27:34

  1. 题目的意思是一开始 0\sim l 全部都种了树,每次操作不是将原来种的树移开,在没有种树的地方种上,而是将区间内存在的所有树去除掉
  2. 区间是包括左右端点的
  3. 道路是从 0l 而非 l-1

by weitianjian @ 2024-03-30 11:29:10

另外,最重要的东西仿佛没改啊


by weitianjian @ 2024-03-30 11:31:28

#include <bits/stdc++.h>
using namespace std;
int m,l,all=0,u[100],v[100];
bool a[1000] = {false};
int main(){
    cin >> l >> m;
    for(int i=0; i<m; i++){
        cin >> u[i] >> v[i];
    }for(int i=0; i<m; i++){
        for(int j=u[i]; /*i<v[i]*/; j++){//改成j<=v[i],这里是死循环的原因
            /*if(a[j] == false){
                a[j] = true;
                break;
            }if(a[j] == true){
                a[j] = false;
                break;
            }*/
            //再理解一下题意然后重新写一下?
        }
    }for(int i=0; /*i<l*/; i++){//改为i<=l,统计至l而不是l-1
        if(a[i] == true){
            all++;
        }
    }cout<<all<<endl;
    return 0;
}

| 下一页