深圳网站建设收费,郑州招聘网,管网建设公司,公司怎么做网页网站文章目录 ABCDEF A
题意#xff1a;
就是有一个m步的楼梯。每一层都有k厘米高#xff0c;现在A的身高是H#xff0c;给了你n个人的身高问有多少个人与A站在不同层的楼梯高度相同。
思路#xff1a;
我们只需要去枚举对于A来说每一层和他一样高#xff08;人的身高和楼… 文章目录 ABCDEF A
题意
就是有一个m步的楼梯。每一层都有k厘米高现在A的身高是H给了你n个人的身高问有多少个人与A站在不同层的楼梯高度相同。
思路
我们只需要去枚举对于A来说每一层和他一样高人的身高和楼梯高度的人数即可。
代码
#includebits/stdc.h#define IOS ios::sync_with_stdio(false);cin.tie(nullptr)
#define int long long
#define endl \n
#define xx first
#define yy secondusing namespace std;const int N 2e5 10, mod 1e9 7;int n, m, k, _, h;
int arr[N];void solve()
{cin n m k h;mapint, int mp;for(int i 1; i n; i ) {cin arr[i];mp[arr[i]];}int ans 0;for(int i 1; i m; i ){ans mp[i*kh];ans mp[-i*kh];}cout ans endl;
}signed main()
{IOS;cin _;while(_--) solve(); return 0;
}B
题意
就是给你n个数你需要把这n个数变成非降序即可但是只能奇数和奇数之间进行位置交换偶数和偶数之间进行位置交换。
思路
我们对于每一个奇数和偶数记录下他们的大小和位置对于奇数和偶数让他们各自内部排序。然后回到他们各自内部排序的位置。
比如 num: 7 10 1 3 2 ip : 1 2 3 4 5
然后我们让奇数和偶数各自内部排序 奇数 num1 3 7 ip 1 3 4
偶数 num:2 10 ip :5 2
结果 1 2 3 7 10 然后按照各自排序的ip重新拼在一起看是否是一个非降序数列就行。
代码
#includebits/stdc.h#define IOS ios::sync_with_stdio(false);cin.tie(nullptr)
#define int long long
#define endl \n
#define xx first
#define yy secondusing namespace std;const int N 1e6 10, mod 1e9 7;int n, m, k, _, h;
int arr[N];void solve()
{cin n;for(int i 1; i n; i ) cin arr[i];vectorint odd, even, ipodd, ipeven;for(int i 1; i n; i ){if(arr[i] 1){odd.push_back(arr[i]);ipodd.push_back(i);}else{even.push_back(arr[i]);ipeven.push_back(i);}}sort(odd.begin(), odd.end());sort(even.begin(), even.end());sort(ipodd.begin(), ipodd.end());sort(ipeven.begin(), ipeven.end());vectorint ans(n1);for(int i 0; i odd.size(); i ){ans[ipodd[i]] odd[i];}for(int i 0; i even.size(); i ){ans[ipeven[i]] even[i];}bool f 0;for(int i 2; i n; i ){if(ans[i] ans[i-1]){f 1;break;在这里插入代码片}}if(f) cout NO endl;else cout YES endl;
}signed main()
{IOS;cin _;while(_--) solve(); return 0;
}C
这道题纯纯阅读理解就直接说思路了。
思路 就是你要找k个第一个数用a来表示从前往后找然后对于最后一个a的位置我们用l来表示然后你要找到k个最后一个数用b来表示从后往前找对于从后往前的最后一个b的位置我们用r来表示。如果l r无解如果对于ab只要一个没有找到k个无解。否则就输出YES就行。如果第一个数和第二个数相等只需要找出k个就行
代码
#includebits/stdc.h#define IOS ios::sync_with_stdio(false);cin.tie(nullptr)
#define int long long
#define endl \n
#define xx first
#define yy secondusing namespace std;const int N 1e6 10, mod 1e9 7;int n, m, k, _, h;
int arr[N];void solve()
{cin n k;int l 0, cnt 0;bool fl 0, fr 0;for(int i 1; i n; i ) cin arr[i];for(int i 1; i n; i ){if(arr[i] arr[1] cnt k) cnt;if(cnt k){fl 1;l i;break;}}int r n;cnt 0;for(int i n; i 1; i --){if(arr[i] arr[n] cnt k){cnt;}if(cnt k){fr 1;r i;break;}}if(arr[1] arr[n]){if(fl || fr){cout YES endl;return;}}if(!fl || !fr){cout NO endl;return;}if(l r){cout NO endl;return;}cout YES endl;
}signed main()
{IOS;cin _;while(_--) solve(); return 0;
}D
这个题当时脑壳瓦特了直接特判了如果差分数组出现了两个及以上就无解。 题意
就是现在给你n-1个数这几个数是n个数的前缀和数组其中少了一个。问你是否存在n个数的前缀和数组满足这n-1个数。这n个数是1~n的。
思路
其实我们只用看这n-1个数的差分数组然后我们就可以去还原数组了。那么我们再去判断差分数组中出现1~n的个数。如果差了一个那么一定有解。如果差了两个我们就去看一下这两个数之和是不等于大于n的那个数差分数组里的数或者是出现了两次的数字之和差分数组里的数出现了两次。如果不等于也是无解。如果等于那就是有解。如果差了两个以上那么一定是无解的。
代码
#includebits/stdc.h#define IOS ios::sync_with_stdio(false);cin.tie(nullptr)
#define int long long
#define endl \n
#define xx first
#define yy secondusing namespace std;const int N 1e6 10, mod 1e9 7;int n, m, k, _, h;void solve()
{cin n;vectorint arr(n1);int ma 0, mi 1e18;mapint, int cnt;for(int i 1; i n; i ) {cin arr[i];ma max(arr[i], ma);mi min(arr[i], mi);} vectorint g(n1);mapint, int fg;for(int i 1; i n; i ){g[i] arr[i]-arr[i-1];fg[g[i]];}int sum 0;int ct 0;for(int i 1; i n; i ){if(!fg[i]) {sum i;ct;}}if(ct 1){cout YES endl;return;}if(ct 2){cout NO endl;return;}int tp 0;for(int i 1; i n; i ){if(fg[g[i]] 2) tp g[i];else if(g[i] n) tp g[i];}if(sum tp){cout YES endl;}else cout NO endl;
}signed main()
{IOS;cin _;while(_--) solve(); return 0;
}E
题意 就是你需要配制出n种药水然后给你n种药水直接购买的花费价值。对于一些药水会提供无数种对于这一类药水的花费价值是0那么没有提供无限次数的药水需要自己去通过配方配置或者直接购买。保证不会出现环就是a只能配置bb只能配置a。问你配置出所有药水的最小价值。
思路
记忆化搜索对于每种可以配置的药水我们给他进行建图单向图因为保证不会出现环的那么我们最后去遍历那些没有别确定价值的药水然后去记忆化搜索下去就行。
队友写的是BFS他这种写法就是能够处理环的。
代码
#includebits/stdc.h#define IOS ios::sync_with_stdio(false);cin.tie(nullptr)
#define int long long
#define endl \nusing namespace std;const int N 2e5 10;int n, m, k, _;
int c[N], p[N];
vectorint e[N];
mapint, bool f;
void dfs(int x)
{int res 0;if(e[x].size() 0){f[x] 1;return;}for(int i 0; i e[x].size(); i ){int g e[x][i];if(!f[g]){dfs(g);res c[g];}else res c[g];}f[x] 1;c[x] min(c[x], res);
}void solve()
{f.clear();cin n k;for(int i 1; i n; i ){cin c[i];e[i].clear();}for(int i 1; i k; i ){int x;cin x;f[x] 1;c[x] 0;}for(int i 1; i n; i ){int x;cin x;while(x--){int g;cin g;e[i].push_back(g);}}for(int i 1; i n; i ){if(!f[i]) dfs(i);cout c[i] ;}cout endl;
}signed main()
{IOS;cin _;while(_--) solve();return 0;
}F
#include bits/stdc.h
//#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl \n
#define lb(x) ((x) (-x))
using namespace std;
typedef unsigned long long ull;
const int maxn 2e510;
const int mod 2e97;
const ull P 13331;
int _,n,m,k;
int tr[maxn * 32][2],idx;
void add(int x)
{int p 0;for(int i k-1; i 0; --i){int z (x i) 1;if(!tr[p][z]) tr[p][z] idx;p tr[p][z];}
}
int get(int x)
{int p 0,ans 0;for(int i k-1; i 0; --i){int z (x i) 1;if(tr[p][z]) p tr[p][z];else p tr[p][1-z],ans (1LL i);}return ans;
}
void clear()
{for(int i 0; i idx; i){for(int j 0; j 1; j) tr[i][j] 0;}idx 0;
}
signed main()
{IOS;cin _;while(_--){clear();cin n k;vectorint a(n1);mapint,vectorint mp;int mx mod;for(int i 1; i n; i){cin a[i];mp[a[i]].push_back(i);if(i 1) mx min(mx,get(a[i]));add(a[i]);}int x 0,y 0;for(int i 1; i n; i){int g (mx^a[i]);if(g ! a[i] mp[g].size() 0) x i,y mp[g][0];else if(g a[i] mp[g].size() 1){x i;if(mp[g][0] ! i) y mp[g][0];else y mp[g][1];}}int z 0;for(int i k-1; i 0; --i){if(((a[x] i) 1) 0) z (1LL i);}cout x y z endl;}return 0;
}