網(wǎng)站支持asp網(wǎng)絡營銷論文畢業(yè)論文
?題目解析
? ? ? ? 通過解析題目我們發(fā)現(xiàn)有以下這些情況:
(1)輸出0:
????????數(shù)組a和數(shù)組b中有一個值超過了k。(包括所有已知的a[i]的值,還有所有已知的b[i]和未知的b[i])
? ? ? ? 有兩種不同的b[i] != -1的{a[i], b[i]}數(shù)對。(利用maxn 和minn來判斷其中數(shù)對相不相同)
(2)輸出1:
? ? ? ? 只有一種{a[i], b[i]}數(shù)對,且不滿足上述輸出0的情況。
? ? ? ? 有多個{a[i], b[i]}數(shù)對,但是他們的和都相同。
(3)輸出其他值(b[i]全部都是-1):
? ? ? ? 利用數(shù)學規(guī)律,輸出的值只和a數(shù)組中的最大值maxa和最小值mina,以及k值有關。種類數(shù)為k - (maxa - mina) + 1;
代碼
#include<bits/stdc++.h>
using namespace std;
#define ll long long
void go()
{int n, k, t = 0;cin >> n >> k;vector<ll> a, b;for(int i = 0; i < n; i++){cin >> t;a.push_back(t);}for(int i = 0; i < n; i++){cin >> t;b.push_back(t);}//輸出0的情況:(1)有一個值超過了k(2)b[i] != -1 中有兩種情況不相同ll sum = 0, maxn = -1, minn = 1e9, maxa = -1, mina = 1e9;for(int i = 0; i < n; i++){mina = min(mina, a[i]);maxa = max(maxa, a[i]);if(a[i] > k){cout << 0 <<"\n";return;}if(b[i] != -1){sum++;maxn = max(maxn, a[i] + b[i]);minn = min(minn, a[i] + b[i]); }if(maxn != minn && maxn != -1 && minn != 1e9){cout << 0 << "\n";return;}}for(int i = 0; i < n; i++){if((a[i] > maxn && maxn != -1) || (maxn - a[i] > k)){//a與b中有一個是大于k的情況cout << 0 << "\n";return;}}if(sum == 1)cout << 1 << "\n";else{if(maxn == minn)cout << 1 << "\n";else cout << k - (maxa - mina) + 1 << endl;}//輸出1:只有一種b[i] != -1//輸出多種的 b[i] 全部都是-1 輸出k到maxa - mina}
int main()
{int t;cin >> t;while(t--){go();} return 0;
}