题目链接:http://codeforces.com/contest/1157
第一题
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=1e5+100;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){
if(y==0) return x;
return gcd(y,x%y);
}
map<int,int> mp;
int main(){
int n;cin>>n;
while(!mp[n]){
mp[n]=1;
n++;while(n%10==0) n/=10;
}
cout<<mp.size()<<"\n";
return 0;
}
第二题
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=1e5+100;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){
if(y==0) return x;
return gcd(y,x%y);
}
int v[20],flag=0;
string s;
int main(){
int n;cin>>n;
cin>>s;
rep(i,1,10) cin>>v[i];
rep(i,0,n){
int num=s[i]-'0';
if(flag){
if(v[num]<num) break;
else s[i]='0'+v[num];
}else{
if(v[num]>num){
flag=1;
s[i]='0'+v[num];
}
}
}
cout<<s<<"\n";
return 0;
}
第三题,第四题
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=2e5+100;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){
if(y==0) return x;
return gcd(y,x%y);
}
int n,a[maxn];
string ans="";
int l[maxn],r[maxn];
int ret=0;
int main(){
ios::sync_with_stdio(false);
cin>>n;rep(i,1,n+1) cin>>a[i];
l[n]=1;
for(int i=n-1;i>=1;i--)
if(a[i]<a[i+1]) l[i]=l[i+1]+1;
else l[i]=1;
r[1]=1;
rep(i,2,n+1)
if(a[i-1]>a[i]) r[i]=r[i-1]+1;
else r[i]=1;
int p=1,q=n,cnt=0;
int cur=0;
while(p<=q){
if(a[p]>cur&&a[q]>cur){
if(a[p]<a[q]){
ans+='L',cur=a[p];
p++,cnt++;
}else if(a[p]>a[q]){
ans+='R',cur=a[q];
q--,cnt++;
}else{
if(l[p]<r[q]){
cnt+=r[q];
rep(i,0,r[q]) ans+='R';
break;
}else{
cnt+=l[p];
rep(i,0,l[p]) ans+='L';
break;
}
}
}else if(a[p]<=cur&&a[q]<=cur){
break;
}else if(a[p]>cur){
ans+='L',cur=a[p];
p++,cnt++;
}else if(a[q]>cur){
ans+='R',cur=a[q];
q--,cnt++;
}
}
cout<<cnt<<"\n"<<ans<<"\n";
return 0;
}
第五题(构造)
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=1e5+10;
const int maxm=1e6+100;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
ll n,k,ans[maxn];
ll pre[maxm];
int main(){
cin>>n>>k;
n-=k*(k+1)/2;
if(n<0) puts("NO");
else{
rep(i,1,k+1) ans[i]=i+n/k;
n%=k;
int flag=1;
for(int i=k;i>=1&&n;i--){
ll val=min(n,2LL*ans[i-1]-ans[i]);
if(val==0) {flag=0;break;}
ans[i]+=val,n-=val;
}
if(flag){
puts("YES");
rep(i,1,k+1) cout<<ans[i]<<" ";
}
else puts("NO");
}
/*
pre[0]=0;
rep(i,1,maxm) pre[i]=pre[i-1]+1;
rep(i,1,maxm) pre[i]+=pre[i-1];
cin>>n>>k;
if(1LL*k*(k+1)/2>n) puts("NO");
else{
if(k==1) cout<<"YES\n"<<n;
else{
int idx=0;
while(idx+k<maxm&&pre[idx+k]-pre[idx]<=n) idx++;
rep(i,0,k){
ans[i]=pre[idx+i]-pre[idx+i-1];
n-=ans[i];
}
int r=k-1,flag=1;
while(n){
if(r==0) r=k-1;
ll tmp=min(ans[r-1]*2-ans[r],n);
if(tmp==0) {
cout<<ans[r-1]<<" "<<ans[r]<<endl;
flag=0;
break;
}
ans[r]+=tmp,n-=tmp;
r--;
}
if(flag==0) puts("NO");
else{
puts("YES");
rep(i,0,k) cout<<ans[i]<<" ";
}
}
}*/
return 0;
}
第六题(multiset)
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=2e5+10;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){
if(y==0) return x;
return gcd(y,x%y);
}
int n,a[maxn],b[maxn];
multiset<int> st;
multiset<int>::iterator it;
int main(){
cin>>n;
rep(i,0,n) cin>>a[i];
rep(i,0,n) cin>>b[i],st.insert(b[i]);
rep(i,0,n){
it=st.lower_bound(n-a[i]);
if(it==st.end()) it=st.lower_bound(0);
a[i]=(a[i]+(*it))%n;
st.erase(it);
cout<<a[i]<<" ";
}
return 0;
}
第七题(模拟)
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=2e5+10;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
int n,a[maxn],cnt[maxn],flag=0;
vector<pii> p,ret;
int main(){
cin>>n;
rep(i,0,n){
int x;cin>>x;
cnt[x]++;
}
int ans=0,cur=0;
rep(i,1,maxn){
if(cnt[i]==1){
cur++;
if(cur>ans){
ans=cur;
p.push_back(mk(i,1));
ret=p;
}
cur=0,p.clear();
cur++;p.push_back(mk(i,1));
}else if(cnt[i]==0){
if(cur>ans) ans=cur,ret=p;
cur=0;
if(p.size()) p.clear();
}else{
cur+=cnt[i];
p.push_back(mk(i,cnt[i]));
}
}
if(cur>ans){
ans=cur,ret=p;
}
cout<<ans<<"\n";
int tmp[maxn],l=0,r=ans+1;
rep(i,0,ret.size()){
rep(j,0,ret[i].se){
flag^=1;
if(flag) tmp[++l]=ret[i].fi;
else tmp[--r]=ret[i].fi;
}
}
rep(i,1,ans+1) cout<<tmp[i]<<" ";
return 0;
}