1 Prime Day (20分)
#include<iostream>
#include<string>
using namespace std;
bool isprime(int k){
if(k==1||k==0) return false;
if(k==2) return true;
for(int i=2;i*i<=k;i++){
if(k%i==0){
return false;
break;
}
}
return true;
}
int to_num(string s)
{
int k=0;
for(int i=0;i<s.size();i++){
k=k*10+s[i]-'0';
}
return k;
}
int main(){
string s;
cin>>s;
int xx=0;
while(s.size()>0){
int k=to_num(s);
if(isprime(k)){
cout<<s<<" Yes";
}
else {cout<<s<<" No";
xx=1;
}
if(s.size()>1) cout<<endl;
s.erase(s.begin());
}
if(xx) cout<<endl<<"All Prime!";
}
2 The Judger (25分)
#include<iostream>
#include<math.h>
#include<set>
#include<vector>
using namespace std;
int main(){
int round,player;
vector<int>jinji;
//int jinji[102]={1};
vector<int>v[101];
set<int>difference;
set<int>num;
int num1,num2;
cin>>num1>>num2;
num.insert(num1);
num.insert(num2);
int first=0;
difference.insert(abs(num2-num1));
cin>>player>>round;
for(int i=1;i<=player;i++){
jinji.push_back(i);
for(int j=0;j<round;j++){
cin>>num1;
v[i].push_back(num1);
}
}//输入
//cout<<jinji.size();
for(int i=0;i<round;i++){
vector<int>::iterator it=jinji.begin();
while(it!=jinji.end()){
int k=*it;//k是player编号,i+1是round编号
if(difference.count(v[k][i])!=0&&num.count(v[k][i])==0){
//cout<<v[k][i]<<" ";
//num.insert(v[k][i]);
vector<int>dif;
set<int>::iterator ite=num.begin();
while(ite!=num.end()){
dif.push_back(abs(v[k][i]-*ite));
ite++;
}
for(int j=0;j<dif.size();j++){
difference.insert(dif[j]);
}
dif.clear();
num.insert(v[k][i]);
it++;
}
else{
//jinji.find(1);
jinji.erase(it);
if(first) cout<<endl;
first=1;
printf("Round #%d: %d is out.",i+1,k);
if(jinji.size()==0) {
cout<<endl<<"No winner.";
return 0;
}
}
}
}
cout<<endl;
vector<int>::iterator ite=jinji.begin();
cout<<"Winner(s):";
while(ite!=jinji.end()){
cout<<" "<<*ite;
ite++;
}
}//将set改为unordered_set提速
3 Safari Park (25分)
#include<iostream>
#include<vector>
#include<set>
using namespace std;
struct road{
int x;
int y;
};
set<int> s;
vector<road>rr;
int anpai[500];
int n,r,m;//n 区域 r road m种类
int main(){
cin>>n>>r>>m;
for(int i=0;i<r;i++){
road t;
cin>>t.x>>t.y;
rr.push_back(t);
}
int k;
cin>>k;
for(int j=0;j<k;j++){
if(!s.empty()) s.clear();
if(j!=0) cout<<endl;
for(int i=1;i<=n;i++){
cin>>anpai[i];
s.insert(anpai[i]);
}
if(s.size()<m){
cout<<"Error: Too few species.";
continue;
}
else if(s.size()>m){
cout<<"Error: Too many species.";
continue;
}
else{
int i=0;
for(;i<r;i++){
int n1=rr[i].x;
int n2=rr[i].y;
if(anpai[n1]==anpai[n2]){
cout<<"No";
break;}
}
if(i==r)
cout<<"Yes";
}
}
}
4 Replacement Selection (30分)
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int n,m,num[100011];
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>num[i];
}
vector<int>v;
vector<int>result[100000];
int k=0;
int j=0;
int now_max=-100000;
while(1){
while(v.size()<m&&j<n) v.push_back(num[j++]);
sort(v.begin(),v.end());
if(!v.empty()){
//cout<<endl;
// cout<<now_max<<" "<<v[v.size()-1];
if(result[k].size()==0) {
result[k].push_back(v[0]);
now_max=v[0];
v.erase(v.begin());
//cout<<now_max<<" ";
}
else if(v[v.size()-1]<now_max){
k++;
result[k].push_back(v[0]);
v.erase(v.begin());
now_max=result[k][0];
if(j==n) break;
//cout<<v.size();
}
else{
vector<int>::iterator it=v.begin();
while(it!=v.end()&&*it<now_max){
it++;
}
result[k].push_back(*it);
//cout<<" "<<*it<<" ";
now_max=*it;
v.erase(it);
}
}
}
if(!v.empty()) result[++k]=v;
for(int i=0;i<=k;i++){
for(int x=0;x<result[i].size();x++){
cout<<result[i][x];
if(x!=result[i].size()-1) cout<<" ";
}
if(i!=k) cout<<endl;
}
}