B. Same Parity Summands ( 1200

#include 
using namespace std;
typedef long long ll;
typedef pair PII;
ll n,m,t;
int main() {
    cin>>t;
    while(t--){
        cin>>n>>m;
        //偶数个偶数相加,一定是偶数
        //奇数个偶数相加,一定是偶数
        //偶数个奇数相加,一定是偶数
        //奇数个奇数相加,一定是奇数
        if(m>n){
            cout << "NO" << endl;
            continue;
        }
        if(n % 2 == 1){
            if(m % 2 == 0){
                cout<<"NO"<

 其实并不需要考虑这么多,学习别人的思路还是蛮重要的

先构造出来一个序列,根据必要的条件进行判断

一开始肯定考虑全部拿1 或 2 

如果拿 1 的话 那么拿的最后一个数字就是 n-k+1  如果这个数大于 0 且这个数是奇数,那么构造出来了。

如果拿2 的话,那么拿的最后一个数字就是n - 2(k+1) ,如果这个数大于 0 且这个数是偶数,就输出就行了。

如果这两个方法都构造不出来,就直接NO

-——————————————————————————

个人方法是判奇偶

n如果是奇数,那么就需要奇数个奇数相加,同时最后一个奇数要为正

n如果偶数,那么就考虑拿奇数还是偶数,

如果 m 是奇数  那么一定要拿偶数,   奇数个偶数相加为偶数

如果 m 是偶数 都可以,但拿奇数能的构造结果的可能一定由于偶数的

你可能感兴趣的:(思维构造,c++,算法,数学建模)