http://bailian.openjudge.cn/xly2017/
A.
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
bool isprime(int n){
if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return false;
}
return true;
}
int main(){
int x,y,sum=0;
cin>>x>>y;
if(x>y) swap(x,y);
for(int i=x;i<=y;i++){
if(isprime(i)) sum++;
}
cout<<sum<<endl;
return 0;
}
B.
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
string s;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
}
int ans=1;
char buf=s[0];
for(int i=1;i<s.size();i++){
if(s[i]==buf) ans++;
else {
printf("(%c,%d)",buf,ans);
ans=1;
buf=s[i];
}
}
printf("(%c,%d)",buf,ans);
return 0;
}
C.
#include <iostream>
#include<cstring>
using namespace std;
const int nmax=100+50;
const int mmax=100+50;
int map[nmax][mmax];
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int main() {
int n,m;
while(cin>>n>>m){
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&map[i][j]);
}
}
int len;//周长
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(map[i][j]==1){
for(int k=0;k<4;k++){//遍历上下左右四个方向
int tx=i+d[k][0];
int ty=j+d[k][1];
if(map[tx][ty]==0){//若果某一节点的节点是海
len++;
}
}
}
}
}
printf("%d\n",len);
}
return 0;
}
D.
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
string s;
int t;
bool flag;
bool used[102];
bool cmp(char a,char b){
return a>b;
}
bool check(string ans){
int sum=(ans[0]-'A'+1-pow());
if(sum==t) return true;
else return false;
}
void dfs(int x){
if(x>=6) {
if(flag=1) return ;
if(check(ans)) {
for(int i=0;i<=4;i++){
cout<<ans[i];
}
flag=1;
cout<<endl;
}
return ;
}
for(int i=0;i<len;i++){
if(used[i]) continue;
ans[xx]=s[i];
used[i]=1;
dfs(x+1);
used[i]=0;
}
}
int main(){
while(cin>>t>>s){
if(t==0&&s=="END") break;
flag=0;
memset(used,0,sizeof(used));
sort(str,str+len,cmp);
dfs(0);
if(!flag) cout<<"no solution"<<endl;
}
}
E.
#include<cstdio>
#include<iostream>
using namespace std;
int t,n,ans,a[105],dp[105];
int main(){
cin>>t;
while(t--){
cin>>n;
ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];dp[i]=1;
}
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
if(a[i]>a[j]) {
dp[i]=max(dp[i],dp[j]+1);
}
}
}
for(int i=1;i<=n;i++){
ans=max(ans,dp[i]);
dp[i]=1;
}
for(int i=n-1;i>=1;i--){
for(int j=n;j>i;j--){
if(a[i]>a[j]) {
dp[i]=max(dp[i],dp[j]+1);
}
}
}
for(int i=1;i<=n;i++){
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
}
}
F.
a每次遇到加油的问题 不是贪心就是搜索,肯这次是BFS+DP或者最短路
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<set>
#include<vector>
#include<fstream>
using namespace std;
const int maxn=1005;
int n,m;
int price[maxn];
struct node{
int e,len;
node(int a,int b):e(a),len(b){}
};
vector<vector<node> > G(1005);
int dp[1005][105];
struct state{
int city,remain,cost;
state(int a,int b,int c):city(a),remain(b),cost(c){}
};
bool operator < (state a,state b){
return a.cost>b.cost;
}
priority_queue<state> steps;
int c,s,e;
void f(){
while(!steps.empty()) steps.pop();
steps.push(state(s,0,0));
while(!steps.empty()) {
state k=steps.top();
if(k.city==e) {
cout<<k.cost<<endl;
return ;
}
steps.pop();
int s=k.city,remain=k.remain,cost=k.cost;
int size=G[s].size();
if(remain<c&&cost+price[s]<dp[s][remain+1]){
steps.push(state(s,remain+1,cost+price[s]));
dp[s][remain+1] =cost+price[s];
}
for(int i=0;i<size;i++){
int len=G[s][i].len;
if(remain>=len&&cost<dp[G[s][i].e][remain-len]){
steps.push(state(G[s][i].e, remain - len, cost));
dp[G[s][i].e][remain - len] = cost;
}
}
}
cout<<"impossible"<<endl;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>price[i];
}
for(int i=1;i<=m;i++){
int s,e,len;
cin>>s>>e>>len;
G[s].push_back(node(e,len));
G[e].push_back(node(s,len));
}
int t;
cin>>t;
while(t--){
cin>>c>>s>>e;
}
return 0;
}
G.
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
bool cmp1(int a,int b){
return a>b;
}
struct cmp{
bool operator()(int a,int b){
return a>b;//优先输出值小的
}
};
int main(){
priority_queue<int,vector<int>,cmp> q;
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int flag;
for(int i=0;i<n;i++){
cin>>flag;
int num;
if(flag==1) {
cin>>num;
q.push(num);
}else if(flag==2){
int to=q.top();
q.pop();
cout<<to<<endl;
}
}
}
}
H.
https://blog.csdn.net/zongza/article/details/80143163