您的位置:首页 > 其它

Codeforces Round #387 (Div. 2)

2017-01-04 18:44 93 查看

A - Display Size

#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

int main(){
int n;
while(scanf("%d", &n) !=EOF){
for(int i = sqrt(n+0.5); i >= 1; i--){
if(n%i==0){
printf("%d %d\n", min(n/i, i), max(n/i,i));
break;
}
}
}
return 0;
}


B - Mammoth’s Genome Decoding

#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

const int maxn = 1000;

char s[maxn];

int main(){
int n;
scanf("%d", &n);
scanf("%s", s);
int a = 0, b = 0, c = 0, d = 0;
if(n%4){
printf("===\n");
return 0;
}
for(int i = 0; i < strlen(s) ; i++){
if(s[i] == 'A') a++;
else if(s[i] == 'G') b++;
else if(s[i] == 'C') c++;
else if(s[i] == 'T') d++;
}
n /= 4;
if(a > n || b > n || c > n || d > n){
printf("===\n");
return 0;
}
else{
a = n-a;
b = n-b;
c = n-c;
d = n-d;
for(int i = 0; i < strlen(s); i++){
if(s[i] == '?'){
if(a){
printf("A");
a--;
}
else if(b){
printf("G");
b--;
}
else if(c){
printf("C");
c--;
}
else if(d){
printf("T");
d--;
}
}
else printf("%c", s[i]);
}
}
return 0;
}


C - Servers

强行用优先队列和STL给写出来的

#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6+10000;

vector <int> vec[maxn];
priority_queue <int, vector<int>, greater<int> > pq;

struct Node{
int t, k, d;
bool operator < (const Node temp)const{
return t < temp.t;
}
}a[maxn];

void init(){
while(!pq.empty()) pq.pop();
for(int i = 0; i < maxn; i++) vec[i].clear();
}

int main(){
int n, q;
while(scanf("%d%d", &n, &q) != EOF){
init();
for(int i = 1; i <= n; i++) pq.push(i);
for(int i = 0; i < q; i++) scanf("%d%d%d", &a[i].t, &a[i].k, &a[i].d);
sort(a, a+q);
int j = 0;
for(int i = 1; i <= 1000000; i++){
for(int k = 0; k < vec[i].size(); k++)
pq.push(vec[i][k]);
if(i == a[j].t){
if(pq.size() >= a[j].k){
int sum = 0;
while(a[j].k){
sum += pq.top();
vec[a[j].t+a[j].d].push_back(pq.top());
pq.pop();
a[j].k--;
}
printf("%d\n", sum);
}
else printf("-1\n");
j++;
if(j >= q) break;
}
}
}
return 0;
}


D - Winter Is Coming

算出每个间距,然后贪心,注意细节即可。

#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 2e5+100;
int a[maxn];
vector <int> vec;

int main(){
int n, k;
while(scanf("%d%d", &n, &k) != EOF){
vec.clear();
int sum = 0;
int change = 0;
int form = -1;
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
if(a[i] < 0){
sum++;
if(form >= 0) vec.push_back(i - form);
form = i;
}
if(i == 0){
if(a[i] < 0) change++;
}
else{
if((a[i-1]>=0&&a[i]<0)||(a[i-1]<0&&a[i]>=0)) change++;
}
}
if(sum > k){
printf("-1\n");
continue;
}
int left = k-sum;
sort(vec.begin(), vec.end());
for(int i = 0; i < vec.size(); i++){
if(vec[i] == 1) continue;
else{
if(left >= vec[i] - 1){
change -= 2;
left -= vec[i] - 1;
}
}
}
if(n - form != 1 && left >= n-form-1) change--;
if(change <= 0) printf("0\n");
else printf("%d\n", change);
}
return 0;
}


E - Comments

自己写了半天一直不停的runtime error,表示快疯了,其实就是一直往下,然后处理到为0的时候再往上推,如果上一步继续为0那么继续往上推,直到停止。

#include<bits/stdc++.h>
using namespace std;
#define MN 1000000
string s,ans[MN+5];
int f[MN+5];
int main()
{
int i,l=1,mx=1;
cin>>s;f[0]=0x7fffffff;
for(i=0;i<s.size();++i)
{
while(!f[l-1]--)--l;if(l>mx)mx=l;
for(;s[i]!=',';++i)ans[l]+=s[i];
ans[l]+=' ';f[l]=0;
for(++i;i<s.size()&&s[i]!=',';++i)f[l]=f[l]*10+s[i]-'0';
++l;
}
cout<<mx<<endl;
for(i=1;i<=mx;++i)cout<<ans[i]<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: