注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

那一日,泪水打湿雪花冰冷的心

曾经的滋味,回忆在一次次的离合中,回眸时,那一刻,如涟漪般在一刹那融化

 
 
 

日志

 
 

URAL 1561  

2010-08-21 22:11:47|  分类: ural |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
高斯消元的经典题目,需要充分理解高斯消元的思想,题目是说,给定一些方程,然后询问给定方程的值(注意不是解),或者说值无法求出,抑或之前的方程组有矛盾
每次加入新的方程时可以看是否和之前的矛盾,询问方程的值时,其实就是利用高斯消元的思想看是否能将询问的方程用之前的方程组线性表示出来,然后消元的过程解自然就求出来了
#include<cstdio>
#include<cstring>
#include<cmath>
char q[7][10]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
char q1[10],q2[10];
int ni[7]={0,1,4,5,2,3,6};
int n,m,a[1010][1010],t,t0,b[1010],c[1010],mark;
int gauss(int m,int n){
for(int i=0;i<n;++i){
if(!a[m][i])
continue ;
if(c[i]==-1){
c[i]=m;
return i;
}
int t=c[i];
int tmp=(a[m][i]*ni[a[t][i]])%7;
for(int j=i;j<n;j++)
a[m][j]=((a[m][j]-tmp*a[t][j])%7+7)%7;
b[m]=((b[m]-tmp*b[t])%7+7)%7;
}
return -1;
}
inline int aa(char s[10]){
for(int i=0;i<7;++i)
if(strcmp(q[i],s)==0)
return i;
}
int main(){
memset(c,-1,sizeof(c));
scanf("%d",&n);
for(int i=0;i<n;++i){
getchar();
scanf("%s",&q1);
if(q1[0]=='A')
++m;
if(q1[0]=='L'){
for(int j=0;j<m;++j){
scanf("%d",&a[t0][j]);
a[t0][j]%=7;
}
getchar();
scanf("%s %s",&q1,&q2);
if(mark)
continue ;
int k1=aa(q1),k2=aa(q2);
b[t0]=(7+k2-k1)%7;
if(gauss(t0,m)!=-1)
++t0;
else if(b[t0])mark=1;
}
if(q1[0]=='E'){
for(int j=0;j<m;++j){
scanf("%d",&a[t0][j]);
a[t0][j]%=7;
}
getchar();
scanf("%s",&q1);
if(mark){
printf("Already crazy\n");
continue ;
}
int k1=aa(q1),k2;
b[t0]=0;
if((k2=gauss(t0,m))!=-1){
c[k2]=-1;
printf("Don't know\n");
}else printf("%s\n",q[(7+k1-b[t0])%7]);
}
}
return 0;
}
  评论这张
 
阅读(462)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018