1.给你一个长度为 �n 的由大写的英文字母组成的字符串,请你找出出现频率最高的长度为2的子串
#include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; char a[100]; int b[27][27]; char c[2]; int main(int argc, char** argv) { int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<n;i++){ b[a[i]-'A'+1][a[i+1]-'A'+1]++; } int m=0; for(int i=1;i<n;i++){ if(m<b[a[i]-'A'+1][a[i+1]-'A'+1]){ m=b[a[i]-'A'+1][a[i+1]-'A'+1]; c[0]=a[i];c[1]=a[i+1]; } } cout<<c[0]<<c[1]; return 0; }
2.战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳 11 个人通过。假如有 22 个人相向而行在桥上相遇,那么他们 22 个人将无法绕过对方,只能有 11 个人回头下桥,让另一个人先通过。但是,可以有多个人同时呆在同一个位置。
#include <iostream> #include<string.h> #include<cmath> #include<algorithm> using namespace std; int main() { int l,n; int a[10000],b[10000]; int x; cin>>l>>n; for(int i=1;i<=n;i++){ cin>>x; a[i]=min(x,l-x+1); b[i]=max(x,l-x+1); } sort(a+1,a+n+1); sort(b+1,b+n+1); cout<<a[n]<<" "<<b[n]; return 0;}
3.
超市里有 �(1≤�≤105)n(1≤n≤105) 个寄包柜。每个寄包柜格子数量不一,第 �i 个寄包柜有 ��(1≤��≤105)ai(1≤ai≤105) 个格子,不过我们并不知道各个 ��ai 的值。对于每个寄包柜,格子编号从 1 开始,一直到 ��ai。现在有 �(1≤�≤105)q(1≤q≤105) 次操作:
1 i j k
:在第 �i 个柜子的第 �j 个格子存入物品 �(0≤�≤109)k(0≤k≤109)。当 �=0k=0 时说明清空该格子。2 i j
:查询第 �i 个柜子的第 �j 个格子中的物品是什么,保证查询的柜子有存过东西。
已知超市里共计不会超过 107107 个寄包格子,��ai 是确定然而未知的,但是保证一定不小于该柜子存物品请求的格子编号的最大值。当然也有可能某些寄包柜中一个格子都没有
#include<bits/stdc++.h> using namespace std; map<int,int>a1[100001]; int n,q; int main() { cin>>n>>q; for(int i=0;i<q;i++) { int a,b,c,d; cin>>a; if(a==1) { cin>>b>>c>>d; a1[b][c]=d; } else { cin>>b>>c; cout<<a1[b][c]<<endl; } } return 0; }
4.
小 K 是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小 K 对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第 �i 艘到达的船,他记录了这艘船到达的时间 ��ti (单位:秒),船上的乘客数 ��ki,以及每名乘客的国籍 ��,1,��,2,…,��,�xi,1,xi,2,…,xi,k。
小K统计了 �n 艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的 2424 小时(2424 小时 =86400=86400 秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化地讲,你需要计算 �n 条信息。对于输出的第 �i 条信息,你需要统计满足 ��−86400<��≤��ti−86400<tp≤ti 的船只 �p,在所有的 ��,�xp,j 中,总共有多少个不同的数。
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n,t,k;
int i=0,r=0;
int a[100001],b[1000001],c[1000001];
int ans;
int main(int argc, char** argv) {
cin>>n;
while(n--){
cin>>t>>k;
while(k--){
a[++r]=t;
cin>>b[r];
if(!c[b[r]])ans++;
c[b[r]]++;
}
while((t-a[i])>=86400){
c[b[i]]--;
if(!c[b[i]])ans--;
i++;
}
cout<<ans<<endl;
}
return 0;
}
5.
一元 �n 次多项式可用如下的表达式表示:
�(�)=����+��−1��−1+⋯+�1�+�0,��≠0f(x)=anxn+an−1xn−1+⋯+a1x+a0,an=0
其中,����aixi 称为 �i 次项,��ai 称为 �i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:
-
多项式中自变量为 �x,从左到右按照次数递减顺序给出多项式。
-
多项式中只包含系数不为 00 的项。
-
如果多项式 �n 次项系数为正,则多项式开头不出
+
号,如果多项式 �n 次项系数为负,则多项式以-
号开头。 -
对于不是最高次的项,以
+
号或者-
号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 00 次的项,其系数的绝对值为 11,则无需输出 11)。如果 �x 的指数大于 11,则接下来紧跟的指数部分的形式为“��xb”,其中 �b 为 �x 的指数;如果 �x 的指数为 11,则接下来紧跟的指数部分形式为 �x;如果 �x 的指数为 00,则仅需输出系数即可。 -
多项式中,多项式的开头、结尾不含多余的空格。
-
#include<cmath> #include<bits/stdc++.h> using namespace std; int n; int main(){ cin>>n; int m[n]; for(int i=n;i>=0;i--){ cin>>m[i]; } for(int i=n;i>=0;i--){ if(m[i]==0&&i!=n)cout<<""; else if(m[i]>1&&i==n)cout<<m[i]<<"x^"<<i; else if(m[i]<-1&&i==n)cout<<m[i]<<"x^"<<i; else if(m[i]==1&&i==n)cout<<"x^"<<i; else if(m[i]==-1&&i==n)cout<<"-"<<"x^"<<i; else if(m[i]>1&&i>1&&i<n)cout<<"+"<<m[i]<<"x^"<<i; else if(m[i]==1&&i>1&&i<n)cout<<"+"<<"x^"<<i; else if(m[i]<-1&&i>1&&i<n)cout<<m[i]<<"x^"<<i; else if(m[i]==-1&&i>1&&i<n)cout<<"-"<<"x^"<<i;// else if(m[i]>1&&i==1)cout<<"+"<<m[i]<<"x"; else if(m[i]==1&&i==1)cout<<"+"<<"x"; else if(m[i]<-1&&i==1)cout<<m[i]<<"x"; else if(m[i]==-1&&i==1)cout<<"-"<<"x"; else if(i==0&&m[i]<0)cout<<m[i]; else if(i==0&&m[i]>0)cout<<"+"<<m[i]; } return 0;} 6.
读入�N个整数,利用折半(二分)插入排序法对这些数排序,输出排序后的�N个数,两个数之间用空格间隔。
这里排序指的是升序。
-
#include<iostream> using namespace std; int main(int argc, char** argv) { int n; cin>>n; int a[n+1];int d; for(int i=1;i<=n;i++){ cin>>a[i]; } for(d=n/2;d>=1;d=d/2){ for(int i=2;i<=n;i++){ a[0]=a[i]; int j=i-d; while(a[0]<a[j]&&j>0){ a[j+d]=a[j]; j=j-d; } a[j+d]=a[0]; } } for(int i=1;i<=n;i++){ cout<<a[i]<<" "; } return 0;}
7
读入�N个整数,利用冒泡排序法对这些数排序,输出排序后的�N个数,两个数之间用空格间隔。
这里排序指的是升序。
#include <iostream> using namespace std; template<class T> void BubbleSort(T r[],int n){ int exchange=n; int bound=0; while(exchange){ bound=exchange; exchange=0; for(int i=1;i<bound;i++){ if(r[i]>r[i+1]){ int tm=r[i]; r[i]=r[i+1]; r[i+1]=tm; exchange=i; } } } } int main() { int n;int i; int a[1001]; cin>>n; for(i=1;i<=n;i++){ cin>>a[i]; } BubbleSort(a,n); for(int j=1;j<=n;j++){ cout<<a[j]<<" "; } return 0; }