summary:6

bzoj1692://后缀数组就行了O(nlogn)c[30]会RE。。。注意!!!

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=60005;
const int inf=0x7f7f7f7f;
char ss[5];int s[nmax],sa[nmax],t[nmax],t2[nmax],rank[nmax],c[nmax],n;
void build_sa(){
int *x=t,*y=t2,m=29;
for(int i=0;i<m;i++) c[i]=0;
for(int i=0;i<n;i++) c[x[i]=s[i]]++;
for(int i=1;i<m;i++) c[i]+=c[i-1];
for(int i=n-1;i>=0;i--) sa[--c[x[i]]]=i;
for(int k=1;k<=n;k<<=1){
int p=0;
for(int i=n-k;i<n;i++) y[p++]=i;
for(int i=0;i<n;i++) if(sa[i]>=k) y[p++]=sa[i]-k;
for(int i=0;i<m;i++) c[i]=0;
for(int i=0;i<n;i++) c[x[i]]++;
for(int i=1;i<m;i++) c[i]+=c[i-1];
for(int i=n-1;i>=0;i--) sa[--c[x[y[i]]]]=y[i];
swap(x,y);p=1;x[sa[0]]=0;
for(int i=1;i<n;i++)
x[sa[i]]=y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+k]==y[sa[i]+k]?p-1:p++;
if(p>=n) break;
m=p;
}
}
int main(){
n=read();
rep(i,0,n-1) scanf("%s",ss),s[i]=ss[0]-'A'+1;
s[n]=0;
rep(i,1,n) s[n+i]=s[n-i];
int tn=n;n*=2;++n; build_sa();
rep(i,0,n-1) rank[sa[i]]=i;
int l=0,r=tn-1;;
rep(i,1,tn){
if(rank[l]<rank[tn-r+tn]) putchar(s[l++]+'A'-1);
else putchar(s[r--]+'A'-1);
if(i%80==0) putchar('\n');
}
return 0;
}

bzoj1697:置换群(感觉好神啊。。。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)) {
if(c=='-') f=-1;c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*f;
}
const int nmax=1e4+5;
const int maxn=1e5+5;
const int inf=0x7f7f7f7f;
int a[nmax],to[maxn],b[nmax],mn,n;
bool vis[nmax];
void mins(int &a,int b){
if(a>b) a=b;
}
int solve(int x){
int tmn=a[x],cnt=1,sum=a[x];vis[x]=1;
for(int tmp=to[b[x]];tmp!=x;tmp=to[b[tmp]])
cnt++,mins(tmn,a[tmp]),sum+=a[tmp],vis[tmp]=1;
return min(sum+(cnt-2)*tmn,sum+tmn+(cnt+1)*mn);
}
int main(){
n=read(),mn=inf;
rep(i,1,n) a[i]=b[i]=read(),mins(mn,a[i]),to[a[i]]=i;
sort(b+1,b+n+1);
int ans=0;
rep(i,1,n) if(!vis[i]) ans+=solve(i);
printf("%d\n",ans);
return 0;
}

bzoj1703:bitset优化传递闭包。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bitset>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define qwq(x) for(edge *o=head[x];o;o=o->next)
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=1005;
const int maxn=10005;
const int inf=0x7f7f7f7f;
bitset<nmax>a[nmax];
struct edge{
int to;edge *next;
};
edge es[maxn],*pt=es,*head[nmax];
bool vis[nmax];
void add(int u,int v){
pt->to=v;pt->next=head[u];head[u]=pt++;
}
void dfs(int x){
vis[x]=1;
qwq(x) {
if(!vis[o->to]) dfs(o->to);
a[x]|=a[o->to];
}
}
int main(){
int n=read(),m=read(),u,v;
rep(i,1,m) u=read(),v=read(),add(u,v);
rep(i,1,n) a[i][i]=1;
rep(i,1,n) if(!vis[i]) dfs(i);
int ans=0;
rep(i,1,n) printf("%d ",a[i].count());printf("\n");
rep(i,1,n) ans+=a[i].count();
printf("%d\n",n*(n-1)/2-ans+n);
return 0;
}

bzoj1704:写了O(n^3)想要卡过去结果tle了。。。异或异或异或!!!可以利用异或的性质O(n^2)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
const int nmax=5005;
const int inf=0x7f7f7f7f;
char s[5];int a[nmax],b[nmax];
int main(){
int n;scanf("%d",&n);
rep(i,1,n) {
scanf("%s",s);
a[i]=s[0]=='F'?0:1;
}
dwn(i,n,2) a[i]=a[i]==a[i-1]?0:1;
int ans,res=inf,cnt;bool flag;
rep(i,1,n) {
cnt=0;flag=true;
rep(j,1,n) b[j]=a[j];
rep(j,1,n) if(b[j]) {
if(j+i-1<=n) cnt++,b[j+i]^=1;
else {
flag=false;break;
}
}
if(flag&&cnt<res) ans=i,res=cnt;
}
printf("%d %d\n",ans,res);
return 0;
}

ch11:没有考虑0.499999的情况WA了一个点还好没有卡精度啊QAQ看题不仔细!懒得改了。。。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-1;c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*f;
}
int main(){
double sum=0;
int t=read();
while(t--){
int n=read(),u;
double sum=0;
rep(i,1,n) u=read(),sum+=u*1.0;
if(sum-0.5*n<=100.0&&sum+0.4*n>=100.0)
printf("Yes\n");
else printf("No\n");
}
return 0;
}

ch12:树状数组+n数码判有无解。没有看好数据范围没开longlong。。。都是一些以为自己不会犯的错误啊。。。懒得改了。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=250005;
int sum[nmax],n;
int query(int x){
int ans=0;
for(int i=x;i;i-=i&-i) ans+=sum[i];
return ans;
}
void add(int x){
for(int i=x;i<=n*n;i+=i&-i) sum[i]+=1;
}
int main(){
while(scanf("%d",&n)!=EOF){
clr(sum,0);
int u,ans=0,res=0;
rep(i,1,n) rep(j,1,n){
u=read();if(!u) continue;
ans+=query(u);add(u);
}
clr(sum,0);
rep(i,1,n) rep(j,1,n) {
u=read();if(!u) continue;
res+=query(u);add(u);
}
if((ans%2)!=(res%2)) printf("NIE\n");
else printf("TAK\n");
}
return 0;
}

8.21 usaco的更多相关文章

  1. USACO . Your Ride Is Here

    Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often co ...

  2. 【USACO 2.3】Cow Pedigrees(DP)

    问n个结点深度为k且只有度为2或0的二叉树有多少种. dp[i][j]=dp[lk][ln]*dp[rk][j-1-ln],max(lk,rk)=i-1. http://train.usaco.org ...

  3. USACO翻译:USACO 2014 JAN三题(1)

    USACO 2014 JAN 一.题目概览 中文题目名称 滑雪场设计 滑雪降速 滑雪场评级 英文题目名称 skidesign slowdown skilevel 可执行文件名 skidesign sl ...

  4. USACO翻译:USACO 2014 MARCH Silver三题

    USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooo ...

  5. [题解]USACO 1.3 Ski Course Design

    Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...

  6. usaco 2010年3月银组题解

    usaco银组解题报告 一.石子游戏如果把‘O’当作0,‘X’当做1,则N个洞的每一种状态都可以看做是一个N位二进制数.于是,这个问题就变成了求环绕的N位格雷码.幸运的是,这个结构很容易就能够用一个简 ...

  7. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  8. 【USACO 1.1.1】你的飞碟在这儿

    [问题描述] 一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO. 这些不明飞行物时常来收集来自在地球上忠诚的支持者. 不幸地,他们的空间在每次旅行只能带上一群支持者. 他们要做的是用一种聪明的 ...

  9. USACO Section 1.3 Prime Cryptarithm 解题报告

    题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...

随机推荐

  1. php入门变量之变量的间接引用、连接字符串和连接赋值运算符

    [1]变量的间接引用: <?php $a = 'b'; $$a = '123'; echo $b; ?> 上面的输出结果是123 我们可以看到在第二行代码中多了一个$,并通过指定的名称访问 ...

  2. 64位CentOS 6.4下安装wine(32位)

    1. 到http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/epel-release.html下载epel-release-6-8.noarc ...

  3. 关于B/S系统在移动端应用的一些注意的地方(不断更新)

    1.不要直接把PC端的页面直接搬到移动端来用.这里举个例子:有个活动页面,在PC端和手机端的Safari里展现都好,但是当用手机APP(如手机淘宝)扫码打开后,却没法顺畅的异步获取到jsonp的信息. ...

  4. call callb callp区别

    对于刚刚接触ILE模式开发的初级菜鸟而言,想要搞清楚这三者的区别还是有点难度的.网上虽然一些帖子对这三者进行了比较,但是这些帖子或是语焉不详,或是高度概括.对于老鸟来说或许已经足矣,但是对于初级菜鸟而 ...

  5. oracle linux了解基本命令行

    1.      Linux的版本:核心(kernel)版本和发行(distribution)版本 2.      复制.删除和移动文件的命令 cp [选项] 源文件或目录  目标文件或目录 -R,-r ...

  6. EXTJS 4.2 资料 控件之隐藏显示setVisible、只读setDisabled

    隐藏: form_Step3_1_left.form.findField('CPTypeId').setVisible(false); 显示: form_Step3_1_left.form.findF ...

  7. 黑马程序员 SaveFileDialog的跨线程调用 (专题三)

    <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a> ...

  8. 走进Vue.js

    走进Vue.js Vue.js作为目前最热门最具前景的前端框架之一,其提供了一种帮助我们快速构建并开发前端项目的新的思维模式.本文旨在帮助大家认识Vue.js,了解Vue.js的开发流程,并进一步理解 ...

  9. Xcode 向6.0以后版本添加iOS开发空白模板

    打开finder,找到应用程序,找到xcode 右键显示包内容.按照如下目录进行查找:Contents ▸ Developer ▸ Platforms ▸ iPhoneOS.platform ▸ De ...

  10. C#取中间文本

    /// <summary> /// 取中间文本 + static string GetMiddleStr(string oldStr,string preStr,string nextSt ...