第1题
直接判断素数即可
#include <bits/stdc++.h>
using namespace std;
bool isp(int num){
if(num==1)return false;
if(num==2)return true;
if(num==3)return true;
for(int i=2;i<=sqrt(num);i++)
if(num%i==0) return false;
return true;
}
int main()
{
string s;
cin>>s;
int n=s.size();
int t;
bool all=1;
for(int i=0;i<n;i++){
string subs=s.substr(i,n-i);
stringstream ss(subs);
ss>>t;
cout<<subs;
if(isp(t)){
cout<<' '<<"Yes"<<endl;
}
else{
cout<<' '<<"No"<<endl;
all=0;
}
}
if(all) cout<<"All Prime!";
return 0;
}
第2题
判断新的数字是不是前面数字的差就行
#include <bits/stdc++.h>
using namespace std;
bool mp[1000000];
vector<int> ex;
int a,b,n,m;
int num[1007][20];
bool isloser[20];
int main()
{
cin>>a>>b;
mp[a]=1;
mp[b]=1;
ex.push_back(a);
ex.push_back(b);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>num[j][i];
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++){
if(isloser[j])
continue;
bool f=0;
for(auto e:ex){
if(mp[e+num[i][j]]==1)
f=1;
}
if(mp[num[i][j]]==1||f==0){
printf("Round #%d: %d is out.\n",i,j);
isloser[j]=1;
}
else{
mp[num[i][j]]=1;
ex.push_back(num[i][j]);
}
}
}
vector<int> ans;
for(int i=1;i<=n;i++){
if(isloser[i]==0)
ans.push_back(i);
}
if(ans.size()==0) cout<<"No winner.\n";
else {
cout<<"Winner(s):";
for(int e:ans) cout<<' '<<e;
}
return 0;
}
第3题
直接DFS
#include <bits/stdc++.h>
using namespace std;
vector<int> G[1000];
int an[1000];
int n,m,RR,K,a,b;
bool ans=0;
bool vis[1000];
void dfs(int s){
if(ans||vis[s]) return ;
vis[s]=1;
for(int e:G[s]){
if(an[s]==an[e])
ans=1;
dfs(e);
}
}
int main()
{
cin>>n>>RR>>K;
for(int i=0;i<RR;i++){
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
cin>>m;
while(m--){
memset(vis,0,sizeof(vis));
set<int> st;
for(int i=1;i<=n;i++) cin>>an[i],st.insert(an[i]);
if(st.size()>K) puts("Error: Too many species.");
else if(st.size()<K) puts("Error: Too few species.");
else{
ans=0;
for(int i=1;i<=n;i++)
dfs(i);
if(ans==0) puts("Yes");
else puts("No");
}
}
return 0;
}
第4题
用优先队列维护内存中的值,按照题意模拟
#include <bits/stdc++.h>
using namespace std;
int n,m;
int num[100007];
vector<int > ans[10007];
priority_queue<int,vector<int>,greater<int>> q;
int lev=0;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>num[i];
for(int i=0;i<m;i++) q.push(num[i]);
for(int i=m;i<n;i++){
if(q.empty()) {
for(int e:ans[lev+1]) q.push(e);
ans[lev+1].clear();
lev++;
}
int f=q.top();
if(f<num[i]){
ans[lev].push_back(f);
q.pop();
q.push(num[i]);
}
else{
ans[lev].push_back(f);
q.pop();
ans[lev+1].push_back(num[i]);
}
}
//if(!q.empty()) lev++;
while(!q.empty()){
ans[lev].push_back(q.top());
q.pop();
}
for(int i=0;i<=lev+1;i++){
if(i>=lev&&ans[i].empty()) break;
sort(ans[i].begin(),ans[i].end());
for(int j=0;j<ans[i].size();j++){
if(j==0) cout<<ans[i][j];
else cout<<' '<<ans[i][j];
}
cout<<endl;
}
return 0;
}