https://ac.nowcoder.com/acm/contest/543#question
A.
代码:
#include <bits/stdc++.h> using namespace std; int N; vector<int> v; int main() { scanf("%d", &N); v.resize(N); for(int i = 0; i < N; i ++) scanf("%d", &v[i]); int ans; sort(v.rbegin(), v.rend()); for(int i = 0; i < N; i ++) { int a = (int)sqrt(v[i]); if(a * a != v[i]) { ans = v[i]; break; } } printf("%d\n", ans); return 0; }
B.
代码:
#include <bits/stdc++.h> using namespace std; int N, M; vector<string> s; vector<string> t; int main() { scanf("%d%d", &N, &M); s.resize(N); t.resize(M); for(int i = 0; i < N; i ++) cin >> s[i]; for(int i = 0; i < M; i ++) cin >> t[i]; for(int i = 0; i < N; i ++) { int ls = s[i].length(); int cnt = 0; for(int j = 0; j < M; j ++) { int lt = t[j].size(); int p1 = 0, p2 = 0, cc = 0; while(p1 < ls && p2 < lt) { while(s[i][p1] != t[j][p2] && p1 < ls && p2 < lt) p1 ++; if(s[i][p1] == t[j][p2]) cc ++, p1 ++, p2 ++; } if(cc == lt) cnt ++; } printf("%d\n", cnt); } return 0; }
C.
代码:
#include <bits/stdc++.h> using namespace std; int T; long long L, R; int main() { scanf("%d", &T); while(T --) { scanf("%lld%lld", &L, &R); int pos = -1; for(int i = 63; i >=0; i --) { if((1LL << i & L) != (1LL << i & R)) { pos = i; break; } } long long ans = 0; for(int i = 0; i <= pos; i ++) ans += 1LL << i; printf("%lld\n", ans); } return 0; }
从高到低找到第一个 L R 不同的位
C.D 比赛的时候忘记被什么中断掉了 待更!(我会记得写的 QAQ)最近很长一段时间都没记得更了 写了题目也没来得及贴上 我我我争取以后不要这样了!前一阵写的题目找个时间都贴出来吧!