您的位置:首页 > 其它

2018年4月1日训练日记

2018-04-01 21:20 211 查看
昨天的比赛,可以说打的非常烂。这场比赛去年打了,当时出了四道题,现在还是四道。所以可以说这次打的非常烂了。
三个人状态都不是很好。本来能轻松搞定的数位dp最后怎么测答案都对1e9都秒出结果,结果居然是TLE。这让我很不解。
赛后换了思路,学习了16进制的输入方法,从头开始重新打一遍,一下就A了。
ZOJ 3962 D.Seven Segment Display / The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple D.数位dp,AC代码如下:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<cmath>
#include<map>
#include<string.h>
#define ll long long
using namespace std;
const int maxn=20;
ll dp[maxn][510];
ll a[maxn];
ll n,m,k,x,y,ans,tmp,cnt,sum,len,l,r,d;
ll mp[]={6,2,5,5,4,5,6,3,7,6,6,5,4,5,5,4};
ll dfs(int pos,ll sum,bool limit)
{
if(pos==-1) return sum;
if(!limit&&dp[pos][sum]!=-1) return dp[pos][sum];
int end=limit?a[pos]:15;
ll ans=0;
for(int i=0;i<=end;i++)
{
ans+=dfs(pos-1,sum+mp[i],limit&&i==end);
}
if(!limit) dp[pos][sum]=ans;
return ans;
}
ll solve(ll x)
{
if(x<0) return 0;
memset(a,0,sizeof(a));
int pos=0;
while(x)
{
a[pos++]=x%16;
x/=16;
}
return dfs(7,0,1);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(dp,-1,sizeof(dp));
scanf("%lld%llx",&d,&x);//十六进制输入
d--;
if(x+d>=4294967296) printf("%lld\n",solve(x+d-4294967296)+solve(4294967295)-solve(x-1));
else printf("%lld\n",solve(x+d)-solve(x-1));
}
return 0;
}还有一题就是E题 ZOJ 3963 Heap Partition(贪心+set)
自己写的不是TLE就是WA,赛后看了AC的代码。。。真的很妙,弄懂了以后自己赶紧去敲了一发AC:#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
typedef long long ll;
#define lson i*2,l,m
#define rson i*2+1,m+1,r
const int mo=1e9+7;
map<int,int>mp;
int n,m,k,nn,mm;
int mmp[maxn];
int c[maxn],f,g;
int a[maxn];
int ans[2000010],num[maxn];
vector<int>vc[maxn];
struct node
{
int id;
int v;
bool operator<(node aa)const
{
return a[id]<a[aa.id]||a[id]==a[aa.id]&&id<aa.id;
}
}q;
int d[maxn];
set<node>st;
set<node>::iterator it;
int main()
{
int T,t;
scanf("%d",&T);
{
while(T--)
{
f=0;st.clear();
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
mmp[i]=0;
scanf("%d",&a[i]);
q.id=i;
it=st.upper_bound(q);
if(it==st.begin())
{
vc[++f].clear();
vc[f].push_back(i);
q.v=f;
st.insert(q);
}
else
{
it--;
node vv=*it;
mmp[vv.id]--;
if(mmp[vv.id]==-2) st.erase(it);
vv.id=i;
st.insert(vv);
vc[vv.v].push_back(i);
}
}
printf("%d\n",f);
int j=0;
for(int i=1;i<=f;i++)
{
int x=vc[i].size();
printf("%d",x);
for(int j=0;j<x;j++)
printf(" %d",vc[i][j]);
puts("");
}
//printf("%d\n",ans);
}
}
return 0;
}离省赛越来越近了,加油!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM