说明
以下源程序均是笔者赛时程序,希望能帮到大家,一起进步!
第一题100分代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define ll long long
#define pb push_back
const int N=1e5+10;
int tt;
string s;
map<char,int > ma;
/
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//freopen("ain.txt","r",stdin);
cin>>tt;
while(tt--)
{
bool shuzi=0,zimu=0,teshu=0;//标记数字、字母和特殊符号是否出现过,方便最后判断
ma.clear();
cin>>s;
int lens=s.size();
s=' '+s;
bool flag=1;
rep(i,1,lens)
{
if(s[i]=='*'||s[i]=='#')
{
teshu=1;
}
else if('0'<=s[i]&&s[i]<='9')
{
shuzi=1;
}
else
{
zimu=1;
}
ma[s[i]]++;
if(ma[s[i]]>2)
{
flag=0;
}
}
if(teshu==0||shuzi==0||zimu==0)
{
cout<<0;
}
else if(flag)
{
cout<<2;
}
else
{
cout<<1;
}
cout<<endl;
}
return 0;
}
第二题100分代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define ll long long
#define pb push_back
const int N=1e5+10;
int tt;
string s;
map<char,char > ma;
string ans[100];
map<char,int > ceng;
map<char,int > vis;
map<char,bool > youu;
int m;
vector<char > v[10000];
bool lunhui=0;
int zuo,you;
map<char,int > leftt,rightt;
int zong;
/
void hanshu(char c,int ceng)
{
v[zong].pb(c);
vis[c]=ceng;
youu[c]=1;
if(ma.count(c)==0)
{
ma[c]=c;
}
if(youu.count(ma[c]))
{
you=ceng;
zuo=vis[ma[c]];
return;
}
hanshu(ma[c],ceng+1);
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//freopen("ain.txt","r",stdin);
string t;
getline(cin,t);
string s;
int lent=t.size();
t=' '+t;
rep(i,2,lent-1)
{
s=s+t[i];
}
int lens=s.size();
s=' '+s;
cin>>m;
getline(cin,t);
rep(i,1,m)
{
getline(cin,t);
ma[ t[1] ]=t[2];
}
rep(i,1,lens)
{
zong=i;
lunhui=0;
youu.clear();
vis.clear();
hanshu(s[i],0);
leftt[s[i]]=zuo;
rightt[s[i]]=you;
}
int qq;
cin>>qq;
while(qq--)
{
int k;
cin>>k;
cout<<"#";
rep(i,1,lens)
{
zuo=leftt[s[i]];
you=rightt[s[i]];
if(k<=you)
{
cout<<v[i][k];
}
else
{
int temp=k;
temp-=you;
temp--;
cout<<v[i][zuo+temp%(you-zuo+1)];
}
}
cout<<"#";
cout<<endl;
}
return 0;
}
第三题30分代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define ll long long
#define pb push_back
const ll inf=1e18;
const int N=2e5+10;
#define pii pair<int ,int >
string ss[N],s,t;
int a[10];
vector<string > v;
vector<string > yuan,zong;
///
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
// freopen("ain.txt","r",stdin);
int n;
cin>>n;
getline(cin,t);
rep(i,1,n)
{
getline(cin,ss[i]);
}
int flag=0;
while(getline(cin,s))
{
if(flag==1)
{
if(s[0]!='+')//yaunwenjian
{
string temp="";
int len=s.size();
rep(i,1,len-1)
{
temp=temp+s[i];
}
yuan.pb(temp);
}
if(s[0]!='-')
{
string temp="";
int len=s.size();
rep(i,1,len-1)
{
temp=temp+s[i];
}
v.pb(temp);
}
}
if(s[0]=='@'&&s[1]=='@')
{
flag=1;
int lens=s.size();
s=' '+s;
int num=0,cnt=0;
rep(i,1,lens)
{
if('0'<=s[i]&&s[i]<='9')
{
num*=10;
num+=s[i]-'0';
}
else
{
if(num)
{
a[++cnt]=num;
num=0;
}
}
}
}
}
int siz=yuan.size();
rep(i,1,n)
{
bool flag=1;
int cnt=0;
rep(j,i,i+siz-1)
{
if(yuan[cnt ]!=ss[j])
{
flag=0;
break;
}
cnt++;
}
if(flag)
{
a[1]=i;
break;
}
}
bool fla=0;
rep(i,1,n)
{
if(i<a[1] || a[1]+a[2]-1<i)
{
cout<<ss[i]<<endl;
}
else if(fla==0)
{
fla=1;
for(auto j:v)
{
cout<<j<<endl;
}
}
}
return 0;
}
第四题60分代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define ll long long
#define pb push_back
const ll inf=1e18;
const int N=5e3+10;
int n,m;
ll x[N],y[N];
struct node
{
int id;
ll n_dis;
node(int b,ll c)
{
id=b;
n_dis=c;
}
bool operator < (const node &a) const
{
return n_dis>a.n_dis;
}
};
struct edge
{
int to;
ll w;
edge(int a,ll c)
{
to=a;
w=c;
}
};
vector<edge > e[N];
bool done[N];
ll dis[N];
void di()
{
int s=1;
rep(i,1,n)
{
dis[i]=inf;
done[i]=0;
}
dis[s]=0;
priority_queue<node > q;
q.push(node(1,0));
while(q.size())
{
node u=q.top();
q.pop();
if(done[u.id])
{
continue;
}
done[u.id]=1;
for(int i=0;i<e[u.id].size();i++)
{
edge y=e[u.id][i];
if(done[y.to])
{
continue;
}
if(dis[y.to]>y.w+u.n_dis)
{
dis[y.to]=y.w+u.n_dis;
q.push(node(y.to,dis[y.to]));
}
}
}
}
///
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
// freopen("ain.txt","r",stdin);
cin>>n>>m;
rep(i,1,n)
{
cin>>x[i]>>y[i];
}
rep(i,1,m)
{
ll xx,yy,r,t;
cin>>xx>>yy>>r>>t;
vector<int > aa,bb;
rep(j,1,n)
{
if( xx-r<=x[j]&&x[j]<=xx+r&&yy-r<=y[j]&&y[j]<=yy+r)
{
aa.pb(j);
bb.pb(j);
}
}
for(auto ii:aa)
{
for(auto jj:bb)
{
if(ii==jj)
{
continue;
}
e[ii].pb(edge(jj,t));
}
}
}
di();
if(dis[n]==inf)
{
cout<<"Nan";exit(0);
}
cout<<dis[n];
return 0;
}
第五题65分代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define ll long long
#define pb push_back
const ll inf=1e18;
const int N=2e5+10;
#define pii pair<int ,int >
int n,m,k;
struct node
{
int id,c;
node(int a,int b)
{
id=a;
c=b;
}
};
vector<node> v[N];
vector<pii > p[N];
int x[N],l[N],r[N];
bool flagb=1;
int sum[N];
int col[N];
///
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//freopen("ain.txt","r",stdin);
cin>>n>>m>>k;
//cout<<n;
rep(i,1,n)
{
int cc;
cin>>cc;
col[i]=cc;
if(cc>i)
{
flagb=0;
}
sum[i]=sum[i-1];
if( col[i-1]!=col[i])
{
sum[i]++;
}
v[1].pb( node(i,cc) );
}
//
rep(i,1,k)
{
cin>>x[i]>>l[i]>>r[i];
}
// cout<<flagb<<endl;
//solveA
// bool flaga=1;
// rep(i,1,k)
// {
// if(r[i]-l[i]>1000)
// {
// flaga=0;
// break;
// }
// }
//
// if(flaga)
// {
//
// }
if(flagb)
{
p[1].pb({1,n});
rep(i,1,k)
{
int ans=0;
vector<pii > temp;
for(auto j:p[x[i]])
{
int leftt=j.first,rightt=j.second;
if(rightt<l[i]||r[i]<leftt)
{
temp.pb(j);
}
else
{
if(l[i]<=leftt)
{
if(r[i]<rightt)
{
p[i+1].pb( {leftt,r[i]} );
temp.pb({r[i]+1,rightt});
}
else
{
p[i+1].pb({leftt,rightt});
}
}
else
{
if(r[i]<rightt)
{
p[i+1].pb( { l[i] ,r[i] } );
temp.pb( {leftt,l[i]-1} );
temp.pb({r[i]+1,rightt});
}
else
{
p[i+1].pb( { l[i] ,rightt } );
temp.pb( { leftt , l[i]-1 } );
}
}
}
}
p[x[i]]=temp;
int duan=0;
int lasttc=0;
for(auto j:p[i+1])
{
//
// cout<<j.first<<" "<<j.second<<endl;
//ans+=sum[j.second]-sum[j.first-1];
duan+=col[j.second]-col[j.first]+1;
if(lasttc==col[j.first])
{
duan--;
}
lasttc=col[j.second];
}
cout<<duan<<" "<<duan<<endl;
}
exit(0);
}
rep(i,1,k)
{
vector<node > temp;
for(auto j:v[ x[i] ] )
{
if(l[i]<=j.id&&j.id<=r[i])
{
v[i+1].pb(j);
}
else
{
temp.pb(j);
}
}
v[x[i]]=temp;
set<int > yanse;
int duan=0;
int lastt=0;
for(auto j:v[i+1])
{
if(j.c!=lastt)
{
duan++;
lastt=j.c;
}
yanse.insert(j.c);
}
cout<<yanse.size()<<" "<<duan<<endl;
}
exit(0);
return 0;
}
谢谢大家!