Codeforces Round #762
A
i和n/2+i是否相等
cin>>s;
int ok = 1;
n = s.size();
if(n&1) ok = 0;
for(int i = 0,j = n/2;i<n/2;i++,j++)
if(s[i]!=s[j])
ok = 0;
ok?puts("YES"):puts("No");
B
2阶到sqrt(n),3阶暴力求,只有当x为z*z才会重合
cin>>n; int res = sqrt(n);
int i = 2;
while(pow(i,3)<=n)
{
if(sqrt(i)-(int)sqrt(i)!=0) res++;
i++;
}
cout<<res<<endl;
C
模拟,不符合break掉(写了半天)
t = "";
cin>>a>>s; int ok = 1;
c = to_string(a);
int i = 0,j = 0;
reverse(all(s));
reverse(all(c));
while(i<c.size())
{
if(s[j]<c[i])
{
if(j+1<s.size())
{
int ss = (s[j]-'0')+(s[j+1]-'0')*10-(c[i]-'0');
if(ss<0||ss>9) {ok = 0;break;}
else t+=to_string(ss);
j++;
}
else {ok = 0;break;}
}
else t+=(s[j]-c[i]+'0');
i++,j++;
}
while(j!=s.size())
{
t+=s[j++];
}
if(t[t.size()-1]=='0') t.pop_back();
reverse(all(t));
if(!ok) cout<<-1<<'\n';
else{
b = 0;
i = 0;
while(i<t.size()) b = b*10+t[i++] - '0';
cout<<b<<endl;
E
桶排序加栈(单调)随取随用,不足-1;
int n;
std::cin >> n;
std::vector<int> cnt(n + 1);
for (int i = 0; i < n; i++) {
int x;
std::cin >> x;
cnt[x]++;
}
ll ans = 0;
std::vector<int> s;
for (int v = 0; v <= n; v++) {
if (ans == -1) {
std::cout << "-1" << " \n"[v == n];
continue;
}
std::cout << ans + cnt[v] << " \n"[v == n];
while (cnt[v]--) {
s.push_back(v);
}
if (s.empty()) {
ans = -1;
} else {
ans += v - s.back();
s.pop_back();
}
}
待补···
本文来自博客园,作者:InsiApple,转载请注明原文链接:https://www.cnblogs.com/InsiApple/p/15715416.html