A.Rounding
题目链接 http://codeforces.com/contest/898/problem/A
题解
手速下
AC代码
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define CLR(a,b) memset(a,(b),sizeof(a))
#define INF 0x3f3f3f3f
const int MAXN = 1e3+10;
int main()
{
int n;
scanf("%d",&n);
if(n == 5) printf("0\n");
else if(n%10 >= 5) printf("%d\n",n+(10-n%10));
else printf("%d\n",n-n%10);
return 0;
}
B.Proper Nutrition
题目链接 http://codeforces.com/contest/898/problem/B
题解
一元二次不定时求解 比赛时直接抄了个扩展gcd 发现不用这么麻烦QAQ
AC代码
#include <bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
LL n, a, b;
cin >> n >> a >> b;
bool flag = false;
for(int i = 0; i <= n; i++) {
if((n-a*i)%b==0 &&((n-a*i)/b)>=0) {
cout << "YES" << '\n';
cout << i << " " << (n-a*i)/b << endl;
flag = true; break;
}
}
if(!flag) cout << "NO" << '\n';
return 0;
}
C.Phone Numbers
题目链接 http://codeforces.com/contest/898/problem/C
题解
非常恶心的一个字符串处理题目 vector 什么的随便搞搞 STL各种套
AC代码
#include <bits/stdc++.h>
using namespace std;
int n, k, cnt = 0;
string s, ss;
vector<string> v, rss;
map<string,bool> mp,ne;
map<string,vector<string> > mm;
map<string,vector<string> > :: iterator it;
bool check(string s1, string s2)
{
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
if(s1.size() >= s2.size()) return false;
for(int i = 0; i < s1.size(); i++) {
if(s1[i] != s2[i]) return false;
}
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin >> n;
for(int i = 0; i < n; i++) {
cin >> s >> k;
if(ne[s] == false) {
cnt ++; ne[s] = true;
}
while(k--) {
cin >> ss; mm[s].push_back(ss);
}
}
cout << cnt << endl;
for(it = mm.begin(); it != mm.end(); it++) {
cout << it->first << ' ';
v = it->second;
rss.clear(); mp.clear();
for(int i = 0; i < v.size(); i++) {
if(mp[v[i]] == false) {
bool flag = false;
for(int j = 0; j < v.size(); j++) {
if(check(v[i],v[j])) {
flag = true; break;
}
}
if(flag == false) {
rss.push_back(v[i]);
mp[v[i]] = true;
}
}
}
cout << rss.size() << ' ';
for(int i = 0; i < rss.size(); i++) {
cout << rss[i] << ' ';
}
cout << "\n";
}
return 0;
}
D. Alarm Clock
题目链接 http://codeforces.com/contest/898/problem/D
题解
一个简答的贪心 不过写法要优美点 不然有可能T, 也可以从树状数组维护
AC代码
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int MAXN = 1e6+10;
int arr[MAXN];
int brr[MAXN];
int main()
{
ios::sync_with_stdio(false);
int n, m, k;
cin >> n >> m >> k;
for(int i = 0; i < n; i++) cin >> arr[i];
sort(arr,arr+n);
int h = 0, l = 0;
int ans = 0;
for(int i = 0; i < n; i++) {
brr[l++] = arr[i];
while(brr[l-1]-brr[h]+1>m && l>h) h++;
while(l-h+1>k) l--,ans++;
}
cout << ans <<endl;
return 0;
}
E. Squares and not squares
题目链接 http://codeforces.com/contest/898/problem/E
题解
维护两个vector就可以了可能是cf 最水的E了吧
AC代码
#include <bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
ios::sync_with_stdio(false);
int n; vector<LL> v1, v2;
cin >> n;
int cnt = 0;
for(int i = 0; i < n; i++) {
LL x; cin >> x;
LL y = sqrt(double(x));
if(y*y == x) {
cnt ++;
if(x == 0) v1.push_back(2);
else v1.push_back(1);
}
else {
LL p = min(x-y*y,(y+1)*(y+1)-x);
v2.push_back(p);
}
}
n = n/2;
if(cnt == n) cout << 0 << endl;
else if(cnt > n) {
sort(v1.begin(),v1.end());
LL ans = 0, i =0;
while(cnt > n) ans+=v1[i++], cnt--;
cout << ans << endl;
}
else {
sort(v2.begin(),v2.end());
LL ans = 0, i = 0;
while(cnt < n) ans+=v2[i++],cnt++;
cout << ans << endl;
}
return 0;
}