2016-11-1
2試題解題報告
by shenben
本解題報告解析均為100分解題思路。
t1列舉+乘法原理(+容斥原理)
滾動列舉最短的s串在t串的頭和尾,然後用乘法原理當前的x。
ans=∑x(注意s串是類似「aabb」這種情況)
t2
dp
第一問:
根據題目中的偽**,乙個點一定會與位於這個點之後並且不大於這個點的點連一條邊,樣例中3會與1和2連一條邊,而1就不會與2連邊,這樣就構成了乙個下降的序列。那麼反過來,不連邊的點就構成了上公升序列,這就是乙個點獨立集,最大的點獨立集就是最長上公升子串行。所以第一問的答案就是最長上公升子串行的長度。
第二問:
問哪些點在最長上公升子串行中必不可少。
因為最長上公升子串行可能有多個,那麼所有上公升子串行中公共的點就是一定在最大點獨立集中的點。
t3
。。
暫時不知道
t1**
ai版
#include#include#include
#define ll long long#ifdef unix
//ifdef千萬別再寫錯了區別 ifndef(×)
#define ll "%lld"
#else
#define ll "%i64d"
#endif
using
namespace
std;
const
int n=3e5+10,m=210
;const
int inf=0x3f3f3f
;char
t[n],s[m];
int n,m,cnt,near[n][30
];int
head[n],tail[n];
void
special_judge()
printf(ll,ans);
}#define name "encrypt"
intmain()
//near[i][j]表示距離t[i]右邊最近的a~z的下標
for(int i=1;i<=26;i++) near[m][i]=inf;
for(int i=m-1;i>=0;i--)
}for(int i=0;i<=m;i++)}}
for(int i=0;i)
ll ans=0;head[0]=-1;//
乘法原理
for(int i=1;i<=cnt;i++) ans+=(ll)(head[i]-head[i-1])*(ll)(m-tail[i]);
printf(ll,ans);
fclose(stdin);
fclose(stdout);
return0;
}
簡短精煉的std
#include#include#include
#define ll long long#ifdef unix
#define ll "%lld"
#else
#define ll "%i64d"
#endif
using
namespace
std;
const
int n=3e5+10
;const
int m=210
;char
t[n],s[m];
intn,m,f[m];
ll ans;
#define name "encrypt"
intmain()
}ans+=n-f[1]+1
; }
printf(ll,ans);
fclose(stdin);
fclose(stdout);
return0;
}
t2**
#include#include#define r register
using
namespace
std;
inline
intread()
while(ch>='
0'&&ch<='9')
return f?x:-x;
}const
int n=1e5+10
;int
n,len,a[n],b[n],f[n],maxx[n],sum[n];
bool
vis[n];
#define name "bubble"
intmain()
else
}printf(
"%d\n
",len);
for(int i=n;i;i--)
}for(int i=1;i<=n;i++) if(vis[i]&&sum[f[i]]==1) printf("
%d "
,i);
fclose(stdin);
fclose(stdout);
return0;
}
t3**]
暫無ac**
/*20分存檔
#include#include#include#include#include#include#define r register
#define debug(x,y) cout<'9')
while(ch>='0'&&ch<='9')
return f?x:-x;
}const ll n=2001;
const ll qlen=n*4-5;
const ll inf=2e9;
ll n,m,pd,sd,dfn[n],low[n],sum[n];
bool mark[n],vis[n];
ll b[n][n];
stacks;
struct node
bool operator <(const node &a) const
}ind[n],outd[n];
struct ss
ss(ll _id,ll _val)
bool operator <(const ss &a) const
}dis[n];
void tarjan(ll v)
else if(mark[w])}}
ll u;
if(low[v]==dfn[v])while(u!=v);
}}ll q[n<<2]=;
ll ans[n];
ll sans[n];
inline void spfa(ll s)}}
}}
//printf("%d",dis[t]);
}void cl()
#define name "rebuild"
int main()
for(ll i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
sort(sum+1,sum+sd+1,greater());
if(sum[1]==n)
sort(outd+1,outd+n+1);
spfa(outd[1].id);
sort(dis+1,dis+n+1);
printf(ll"\n",dis[1].val+1);
ll tv=dis[1].val;ans[++ans[0]]=dis[1].id;
for(ll i=2;i<=n;i++) if(dis[i].val==tv) ans[++ans[0]]=dis[i].id;
for(ll i=1,z=outd[1].id,pt,x,y;i<=ans[0];i++)
sort(sans+1,sans+sans[0]+1);
ll cnt=unique(sans+1,sans+sans[0]+1)-(sans+1);
printf(ll"\n",cnt);
for(ll i=1;i<=cnt;i++)
fclose(stdin);
fclose(stdout);
return 0;
}*/
2016 11 17試題解題報告
2016 11 17試題解題報告 by shenben 水災 sliker.cpp c pas 1000ms 64mb 大雨應經下了幾天雨,卻還是沒有停的樣子。土豪ccy剛從外地賺完1e元回來,知道不久除了自己別墅,其他的地方都將會被洪水淹沒。ccy所在的城市可以用乙個n m n,m 50 的地圖表...
濟南 1031試題解題報告
濟南 1031試題解題報告 by shenben 本解題報告解析均為100分解題思路。題意自行讀題。總結題意太累了 解析 打錶出所有 k 其中 k mod 10000000 0 詢問時直接找到已知的答案,並計算不超過 10000000 就能找到答案。解析 先將 ai進行排序。令f i 表示1 i 中...
Mountains CVTE面試題 解題報告
題目大意 用乙個陣列代表群山的高度。高度大的地方代表山峰,小的地方代表山谷。山谷可以容水。假設有一天下了大雨,求群山中總共可以容納多少水?如圖所示情況,a代表該陣列,總共可以容納5個水。解題思路 初步想法可以列舉每乙個單位,判斷是否能放水。這種做法的複雜度為o n 2 h 其中h為陣列最大值,n為陣...