20171024
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20171024相关的知识,希望对你有一定的参考价值。
Luogu八连测ROUND4
T14561
思路:模拟就好啦,前面定义变量的时候非常头不行的把f和len全定义成了char类型,然后gg...
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 char str[100005]; 6 int f,len; 7 int main() 8 { 9 //freopen("T1.in","r",stdin); 10 //freopen("T1.out","w",stdout); 11 gets(str+1); 12 len=strlen(str+1); 13 for(int i=1;i<=len;++i) 14 { 15 if(str[i]==‘.‘) 16 { 17 f=0; 18 putchar(‘.‘); 19 } 20 else if(str[i]==‘ ‘) putchar(‘ ‘); 21 else if(str[i]>=‘a‘&&str[i]<=‘z‘) 22 { 23 if(!f) 24 putchar(str[i]-‘a‘+‘A‘); 25 else putchar(str[i]); 26 f=1; 27 } 28 else if(str[i]>=‘A‘&&str[i]<=‘Z‘) 29 { 30 if(f) putchar(str[i]-‘A‘+‘a‘); 31 else putchar(str[i]); 32 f=1; 33 } 34 } 35 return 0; 36 }
T14562
思路:链表,套啊套啊套就出来了,注意数组要开大一点,题目说是1e5但是开1e5+10的数组会有4个点RE...
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<queue> 5 using namespace std; 6 inline int read() 7 { 8 int f=1,x=0;char ch=getchar(); 9 while(ch<‘0‘||ch>‘9‘) 10 { 11 if(ch==‘-‘) f=-1; 12 ch=getchar(); 13 } 14 while(ch>=‘0‘&&ch<=‘9‘) 15 { 16 x=x*10+ch-‘0‘; 17 ch=getchar(); 18 } 19 return x*f; 20 } 21 int n,id[1000050]; 22 bool vis[2000050]; 23 struct node 24 { 25 int l,r,w; 26 }a[100050]; 27 priority_queue<int> q; 28 queue<int> qwq; 29 int main() 30 { 31 n=read(); 32 for(int i=1;i<=n;++i) a[i].w=read(),id[a[i].w]=i; 33 for(int i=1;i<n;++i) 34 { 35 a[i].l=i-1; 36 a[i].r=i+1; 37 q.push(a[i].w); 38 } 39 a[n].r=0; 40 a[n].l=n-1; 41 a[1].l=0; 42 a[1].r=2; 43 while(!q.empty()) 44 { 45 // int x=q.top(); 46 while(vis[id[q.top()]]) 47 { 48 q.pop(); 49 if(q.empty()) break; 50 } 51 if(q.empty()) break; 52 if(!a[id[q.top()]].r) 53 { 54 vis[id[q.top()]]=1; 55 continue; 56 } 57 vis[id[q.top()]]=1; 58 vis[a[id[q.top()]].r]=1; 59 a[a[id[q.top()]].l].r=a[a[id[q.top()]].r].r; 60 a[a[a[id[q.top()]].r].r].l=a[id[q.top()]].l; 61 qwq.push(q.top()); 62 qwq.push(a[a[id[q.top()]].r].w); 63 } 64 while(!qwq.empty()) 65 { 66 printf("%d ",qwq.front()); 67 qwq.pop(); 68 } 69 return 0; 70 }
T14563
思路:dfs,枚举,嗯就酱。。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int ans,n,m,a[20][20],c[20][20],d[20]; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) f=-1; ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘) { x=x*10+ch-‘0‘; ch=getchar(); } return f*x; } bool check(int o) { return o<=12&&(o%3==0?1:0); } void dfs(int stp) { if(stp>n) { int res=0; for(int j=1;j<=m;++j) { c[j][0]=c[j][1]=c[j][2]=0; for(int i=1;i<=n;++i) for(int k=0;k<=2;++k) c[j][k]+=check(d[i]+a[i][j]+k); res+=max(max(c[j][0],c[j][1]),c[j][2]); } ans=max(res,ans); return ; } for(int i=0;i<=2;++i) { d[stp]=i; dfs(stp+1); } } int main() { n=read();m=read(); for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%d",&a[i][j]); dfs(1); printf("%d\n",ans); }
-------------------------分割线--------------------------------------------------分割线--------------------------------------------------分割线--------------------------------------------------分割线--------------------------------------------------分割线-----------------------------------------------------------------------------------
数学大总结,从某julao手上low来的
具体算法思路详见《数学一本通》
1 //组合数 2 //C(n,m) 在n个数中选m个的方案数 3 ll C[N][N]; 4 void get_C(int n) 5 { 6 for(int i=1;i<=n;i++) 7 { 8 C[i][i]=C[i][0]=1; 9 for(int j=1;j<i;j++) 10 C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod; 11 } 12 } 13 //欧几里得算法 14 //(a,b) 15 ll gcd(ll a,ll b) 16 { 17 return b==0? a:gcd(b,a%b); 18 } 19 //拓展欧几里得算法 20 //解同余方程 a*x+b*y = (a,b) 21 ll exgcd(ll a,ll b,ll& d,ll& x,ll& y) 22 { 23 if(!b) { d=a; x=1; y=0; } 24 else { exgcd(b,a%b,d,y,x); y-=x*(a/b); } 25 } 26 //逆元 27 //a*inv(a,n) = 1 mod n 28 ll inv(ll a,ll n) 29 { 30 ll d,x,y; 31 exgcd(a,n,d,x,y); 32 return d==1? (x+n)%n:-1; 33 } 34 //lucas定理 35 //计算较大,有模数的组合数 36 ll fac[N]; 37 void get_pre(int n) 38 { 39 for(int i=1;i<=n;i++) 40 fac[i]=(fac[i-1]*i)%mod; 41 } 42 ll C(ll n,ll m,ll mod) 43 { 44 if(n<m) return 0; 45 if(n<mod&&m<mod) 46 return fac[n]*inv(fac[m],mod)%mod*inv(fac[n-m],mod)%mod; 47 return C(n/mod,m/mod,mod)*C(n%mod,m%mod,mod)%mod; 48 } 49 //快速幂 50 //a^p % mod 51 ll pow(ll a,ll p,ll mod) 52 { 53 ll ans=1; 54 while(p) 55 { 56 if(p&1) ans=(ans*a)%mod; 57 a=(a*a)%mod; p>>=1; 58 } 59 return ans; 60 } 61 //中国剩余定理 62 //解线性同余方程组 63 //sigma{ ai*(1-ai*mi) } % M , ai*mi+wi*y=1 64 ll a[N],m[N]; 65 ll china(int n) 66 { 67 ll M=1,d,x=0,y; 68 for(int i=1;i<=n;i++) M*=m[i]; 69 for(int i=1;i<=n;i++) 70 { 71 ll w=M/m[i]; 72 exgcd(m[i],w,d,d,y); 73 x=(x+y*w*a[i])%M; 74 } 75 return (x+M)%M; 76 } 77 //大步小步算法 78 //计算a^x=b mod n中的最小x 79 map<int,int> mp; 80 int BSGS(int a,int b,int n) 81 { 82 int m=sqrt(n)+1,e=1,i; 83 int v=inv(pow(a,m,n),n); 84 mp[e]=0; 85 for(i=1;i<m;i++) 86 { 87 e=(e*m)%n; 88 if(!mp.count(e)) mp[e]=i; 89 } 90 for(i=0;i<m;i++) 91 { 92 if(mp.count(b)) return i*m+mp[b]; 93 b=(b*v)%mod; 94 } 95 return -1; 96 } 97 //快速筛法求素数表 98 int su[N],vis[N]; 99 void get_su(int n) 100 { 101 for(int i=2;i<=n;i++) 102 { 103 if(!vis[i]) su[++su[0]]=i; 104 for(int j=1;j<=su[0]&&i*su[j]<=n;j++) 105 { 106 vis[i*su[j]]=1; 107 if(i%su[j]==0) break; 108 } 109 } 110 } 111 //欧拉函数 112 //phi(n)小于n的数中与n互素的数的个数 113 ll get_phi(int n) 114 { 115 int m=sqrt(n)+1; 116 ll ans=n; 117 for(int i=2;i<=m;i++) if(n%i==0) 118 { 119 ans=ans/i*(i-1); 120 while(n%i==0) n/=i; 121 } 122 if(n>1) ans=ans/n*(n-1); 123 return ans; 124 } 125 ll phi[N]; 126 void get_phi_table(int n) 127 { 128 phi[1]=1; 129 for(int i=2;i<=n;i++) if(!phi[i]) 130 { 131 for(int j=i;j<=n;j+=i) 132 { 133 if(!phi[j]) phi[j]=j; 134 phi[j]=phi[j]/i*(i-1); 135 } 136 } 137 }<br>//莫比乌斯函数 138 int mu[N],su[N],vis[N]; 139 void get_mu(int n) 140 { 141 mu[1]=1; 142 for(int i=2;i<=n;i++) 143 { 144 if(!vis[i]) mu[i]=-1,su[++su[0]]=i; 145 for(int j=1;j<=su[0]&&i*su[j]<=n;j++) 146 { 147 vis[i*su[j]]=1; 148 if(i%su[j]==0) mu[i*su[j]]=0; 149 else mu[i*su[j]]=-mu[i]; 150 } 151 } 152 } 153 //高斯消元 154 //解线性方程组 155 double a[N][N]; 156 void gause(int n) 157 { 158 for(int i=1;i<=n;i++) 159 { 160 int r=i; 161 for(int j=i+1;j<=n;j++) 162 if(fabs(a[j][i])>fabs(a[r][i])) r=i; 163 for(int j=1;j<=n+1;j++) swap(a[i][j],a[r][j]); 164 for(int j=n+1;j>=i;j--) 165 for(int k=i+1;k<=n;k++) 166 a[k][j]-=a[k][i]/a[i][i]*a[i][j]; 167 } 168 for(int i=n;i;i--) 169 { 170 for(int j=i+1;j<=n;j++) 171 a[i][n+1]-=a[j][n+1]*a[i][j]; 172 a[i][n+1]/=a[i][i]; 173 } 174 }
以上是关于20171024的主要内容,如果未能解决你的问题,请参考以下文章