五道编程题 分成两部分 第一部分4道 第二部分一道 状态不是很好 一直很懵 做题的时候 大概是 54.4 分吧 如果 再调试五分钟可能就 能64,4 不过也不咋咋地
不重复子串 没找到规律 骗了0.18
#include<iostream>
#include<vector>
using namespace std;
int main(){
string s;
cin>>s;
vector<vector<int>>num(s.size(),vector<int>(26,0));
for(int i=0;i<s.size();i++){
for(int j=0;i>0&&j<26;j++){
num[i][j]=num[i-1][j];
}
num[i][s[i]-'a']++;
}
// for(int i=0;i<s.size();i++){
// for(int j=0;j<26;j++){
// cout<<num[i][j]<<" ";
// }cout<<endl;
// }
return 0;
}
球体 按 经度 维度 切块数
时间到了 之后1分钟 才想起来 平面 过中心 切的 规律 脑子蒙蒙的 这也没想出来
#include<iostream>
using namespace std;
int jj[180];
int ww[360];
int main(){
int n;
cin>>n;
long long jing=0,wei=0;
int a,b;
for(int i=0;i<n;i++){
cin>>a>>b;
if(a==0){
ww[b]=1;
}
if(a==1){
jj[b%180]=1;
}
}
for(int i=0;i<180;i++){
if(jj[i]==1)jing++;
// if(ww[i]==1)wei++;
}
for(int i=0;i<360;i++){
if(ww[i]==1)wei++;
// if(ww[i]==1)wei++;
}
cout<<(jing+1)*(wei+1);
return 0;
}
#include<iostream>
#include<math.h>
//#include<sstream>
using namespace std;
//stringstream sm;
string ss(int t){
if(t==1){
return "1";
}
string s;
string s1 = to_string(1);
//sm<<1;
//sm>>s1;
string s2 = to_string(t) ;
//sm<<t;
//sm>>s2;
//cout<<s2<<endl;
for(int i=2;i<=sqrt(t);i++){
if(t%i==0){
s1=s1+to_string(i);
//sm<<t/i;
//string tt = ""+t/i;
string tt = to_string(t/i);
//sm>>tt;
//cout<<tt<<endl;
if(i*i!=t){
s2=tt+s2;
//cout<<s2<<endl;
}
}
}
s= s1+s2;
//cout<<s<<endl;
return s;
}
int contain(string s1,string s2){
for(int i=0;i<s1.size();i++){
for(int j=0;j<s2.size();j++){
if(s1[i]==s2[j]){
cout<<j<<" "<<s2.size() <<endl;
if(j==s2.size()-1){
return 1;
}
continue;
}else{
break;
}
}
}
return 0;
}
int fun(int t,int k){
string s = ss(t);
string p = to_string(k);
//sm<<k;
//p = sm.str();
//sm>>p;
//cout<<s<<endl;
string::size_type pos;
pos = s.find(p);
if(pos != s.npos){
return 1;
}else{
return 0;
}
//return contain(s,p);
}
int main(){
int n,k;
cin>>n>>k;
int count=0;
for(int i=0;i<n;i++){
int t;
cin>>t;
//cout<<fun(t,k)<<endl;
count+=fun(t,k);
}
cout<<count;
return 0;
}
给二维数组 从1蹦到k 算最小花费 写半天没过 样例
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
struct node{
int x;
int y;
int val=0;
};
int main(){
int n,k;
cin>>n>>k;
vector<vector<int>>nums(n,vector<int>(n));
vector<bool>bl(k+1);
vector<vector<node>>value(k+1,vector<node>() );
int t;
int count=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>t;
nums[i][j]=t;
node nn;
nn.x=i;
nn.y=j;
nn.val=0;
value[t].push_back(nn);
if(bl[t]==false){
bl[t]=true;
count++;
}
}
}
int ans = 99999;
if(count!=k){
cout<<"-1"<<endl;
return 0;
}else{
for(int i=2;i<=k;i++){
for(int j=0;j<value[i].size();j++){
int min = 999999;
node x = value[i][j];
cout<<x.val<<" "<< i <<endl;
for(int p=0;p<value[i-1].size();p++){
node y = value[i-1][p];
cout<<abs(x.x-y.x)<<" "<<abs(x.y-y.y)<<" "<<y.val<<endl;
int sum = abs(x.x-y.x)+abs(x.y-y.y)+y.val;
cout<<sum<<endl;
if(sum<min){
min = sum;
}
}
value[i][j].val = min;
}
if(i==k){
for(int j=0;j<value[i].size();j++){
if(value[i][j].val<ans){
ans = value[i][j].val;
}
}
}
}
}
cout<<ans<<endl;
return 0;
}
发糖 必须从 0 开始连续拿 可以一个不拿 求最大值
#include<iostream>
using namespace std;
int main(){
int a,b,t;
cin>>a>>b;
int suma=0;
int sumb=0;
int mmax=0,mmbx=0;
for(int i=0;i<a;i++){
cin>>t;
suma+=t;
if(suma>mmax){
mmax=suma;
}
// if(suma<0){
// suma=0;
// }
}
for(int i=0;i<b;i++){
cin>>t;
sumb+=t;
if(sumb>mmbx){
mmbx=sumb;
}
// if(sumb<0){
// sumb=0;
// }
}
if(mmax<0)mmax=0;
if(mmbx<0)mmbx=0;
cout<<mmax+mmbx<<endl;
return 0;
}