比赛地址:http://codeforces.com/contest/4
A. Watermelon
给你一个数,问你能不能分成两个偶数。
很显然只有2之外的偶数才可以。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
if(n%2==0&&n!=2)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
B. Before an Exam
每天都有一个学习的最少时间和最大时间。问你能不能在给定的天数内达到sum,如果不可以输出NO,可以则输出YES和每天学习的时间,任一种满足条件的都可以。
首先判断sum是否在每天都学习最短时间(t1)的总和与每天都学习最长时间(t2)的总和里,不在为NO。然后算sum比t1多的那一部分,在天数之内分摊掉就可以了。
#include <bits/stdc++.h>
using namespace std;
int mintime[35];
int maxtime[35];
int minsum[35];
int maxsum[35];
int main() {
int day,sum;
cin>>day>>sum;
for(int i=1;i<=day;i++)
{
cin>>mintime[i];
cin>>maxtime[i];
minsum[i]=mintime[i]+minsum[i-1];
maxsum[i]=maxtime[i]+maxsum[i-1];
}
if(sum>maxsum[day]||sum<minsum[day])
{
cout<<"NO"<<endl;
}
else
{
cout<<"YES"<<endl;
int t=sum-minsum[day];
for(int i=1;i<=day;i++)
{
int up=min(maxtime[i]-mintime[i],t);
t-=up;
if(i!=1)
cout<<" ";
cout<<mintime[i]+up;
}
cout<<endl;
}
}
C. Registration system
给你一个字符串,问你有没有出现过,没有输出OK,否则在字符串后面加个数字,输出这个新生成的字符串。
用map即可。一开始用set竟然超时了。
#include <iostream>
#include <map>
using namespace std;
int main()
{
int t;
cin>>t;map<string,int>x;
while(t--)
{
string s;
cin>>s;
if(x[s]==0)
{
cout<<"OK"<<endl;
}
else
{
cout<<s<<x[s]<<endl;
}
x[s]++;
}
}
D不会。