题目:
对于一个字符串,编程找出其中的所有整数。例如,字符串"a12bc34d05",其中有整数12、34、5。
要点总结:
用一个temp字符串保留中间的结果,如果扫到字母且temp有值,那么一个整数扫完了,转成int型塞进去。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(getline(cin,s)){
vector<int> arr;
string temp="";
for(char c : s){
if(isdigit(c)){
temp=temp+c;
}else{
if(temp.size()>0){
arr.push_back(stoi(temp));
temp.clear();
}
}
}
if(temp.size()>0){
arr.push_back(stoi(temp));
}
cout<<arr.size();
for(int n : arr){
cout<<" "<<n;
}
cout<<endl;
}
return 0;
}
题目:
据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文。你的工作就是去这些牛制造的奇观(最棒的回文)。在寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便做为答案输出),只用考虑字母'A'-'Z'和'a'-'z'。要你寻找的最长的回文的文章是一个不超过20,000个字符的字符串。我们将保证最长的回文不会超过2,000个字符(在除去标点符号、空格之前)。
要点总结:
思路并不难,遍历过程中记录一下正常字符串以及pure之后的字符串,然后更新循环变量。这里需要注意的是读长文本要把换行符'\n'也读入,最后有多的再pop。另外,判断一下如果第一个是字母再进入,空格和符号就不用进入了。
代码:
#include<bits/stdc++.h>
using namespace std;
bool ishui(string a){
string b=a;
reverse(b.begin(),b.end());
return b==a;
}
int main(){
string s;
string text="";
while(getline(cin,s)){
text=text+s+"\n";
}
if(s.size()>0&&s.back()=='\n'){
s.pop_back();
}
int maxsize=0;
string res;
for(int start=0;start<text.size();start++){
for(int len=1;len<=text.size()-start;len++){
string cur="";
if(isalpha(text[start])){
for(int i=start;i<=start+len-1;i++){
cur=cur+text[i];
}
string pure="";
for(int i=start;i<=start+len-1;i++){
if(isalpha(text[i])){
char m=tolower(text[i]);
pure=pure+m;
}
}
if(ishui(pure)){
if(pure.size()>maxsize){
maxsize=pure.size();
res=cur;
}
}
}
}
}
cout<<maxsize<<endl<<res;
return 0;
}
题目:
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
要点总结:
做过几遍类似的题目了,不断模拟加法的竖式计算就可以了,这里写的不大好,其实不用区分两个长度,只要其中有一个长度没到头就可以不停的算,到头的那个用0就可以。写个三目运算符比我这样写方便些。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
bool flag=false;
for(int i=0;i<n;i++){
string s1,s2;
cin>>s1>>s2;
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
vector<int> t1(s1.size());
vector<int> t2(s2.size());
for(int i=0;i<s1.size();i++){
t1[i]=s1[i]-'0';
}
for(int i=0;i<s2.size();i++){
t2[i]=s2[i]-'0';
}
vector<int> m;
if(s1.size()>s2.size()){
m=t1;
}else{
m=t2;
}
int len=min(s1.size(),s2.size());
int mlen=max(s1.size(),s2.size());
int jin=0;
vector<int> res;
for(int i=0;i<len;i++){
int a=t1[i]+t2[i]+jin;
int cur=a%10;
res.push_back(cur);
jin=a/10;
}
for(int i=len;i<mlen;i++){
int a=m[i]+jin;
int cur=a%10;
res.push_back(cur);
jin=a/10;
}
while(jin>0){
int cur=jin%10;
res.push_back(cur);
jin=jin/10;
}
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
if(flag){
cout<<endl;
}else{
flag=true;
}
cout<<"Case "<<i+1<<":"<<endl<<s1<<" + "<<s2<<" = ";
for(int i=res.size()-1;i>=0;i--){
cout<<res[i];
}
cout<<endl;
}
}
题目:
C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点。它的功能是怎么实现的呢?
我们做好了题目的解答,提交之后,要么"AC",要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题"AC"后,就要与你算一算帐了,总共该题错误提交了几回。虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间。特别是,曾经有过的错误提交,每次都要摊上一定的单位时间分。这样一来,你在做出的题数上,可能领先别人很多,但是,在做出同样题数的人群中,你可能会在耗时上处于排名的劣势。
例如:某次考试一共8题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数,但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上一对括号,里面有个整数b,那就表示该学生提交该题AC了,耗去了时间a,同时,曾经错误提交了b次(如果b为0则没有括号及b),因此对于下述输入数据:

若每次错误提交的罚分为20分,即每错误提交一次,在总耗时时增加20分钟,则其排名从高到低应该是这样的:
Josephus 5 376
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0
要点总结:
封装一个结构体,然后按题目要求写一个compare方法,每度一个就加到vector里面,全部按要求赋值,小心一点别写错。
代码:
#include<bits/stdc++.h>
using namespace std;
struct stu{
string name;
int acnum;
int timescore;
};
bool compa(stu a,stu b){
if(a.acnum!=b.acnum) return a.acnum>b.acnum;
if(a.timescore!=b.timescore) return a.timescore<b.timescore;
return a.name<b.name;
}
int main(){
int n,m;
cin>>n>>m;
cin.ignore(INT_MAX,'\n');
string s;
vector<stu> res;
while(getline(cin,s)){
stringstream ss(s);
string name;
ss>>name;
stu a;
a.name=name;
a.acnum=0;
a.timescore=0;
for(int i=0;i<n;i++){
string num;
ss>>num;
if(num.back()!=')'){
int x=stoi(num);
if(x>0){
a.acnum++;
a.timescore+=x;
}
}else{
int idx1=num.find('(');
int idx2=num.find(')');
string x=num.substr(0,idx1);
string y=num.substr(idx1+1,idx2-idx1-1);
a.acnum++;
a.timescore+=stoi(x);
a.timescore+=stoi(y)*m;
}
}
res.push_back(a);
}
sort(res.begin(),res.end(),compa);
for(stu u : res){
cout<<left<<setw(10)<<u.name<<" "<<right<<setw(2)<<u.acnum<<" "<<setw(4)<<u.timescore<<endl;
}
return 0;
}
英语翻译:
循环神经网络转换器(RNNTs)极大提升了语音识别的准确度。这些模型通过同步处理输入输出序列减少了英语语音转写的词错误率。然而,它们的大规模参数使得模型在边缘设备上的部署具有挑战性。
人工智能驱动的内容生成工具可以高效生成文本、图像以及视频。这些工具使用类似生成对抗网络以及扩散模型等生成性模型。尽管它们提升了创造性以及生产力,这些模型同样增加了人们对于版权侵权以及虚假信息传播的担忧。
边缘人工智能将人工智能模型部署在本地设备而不是云服务器上。这种操作降低了延迟,保护了数据隐私并且支持实时响应。其应用场景包括智能摄像头、可穿戴健康监控器以及需要即时数据处理的工业传感器。
