感觉T2反而是最难的。。反正代码是越来越暴力了。。。
这次前两题的代码都很没美感。。
不过T1终于上240了,T2终于上400了(然而是550啊)
T3调了半天结果竟然是数组开小了= =

T1 PalindromePrime

丑陋的暴力

#include <bits/stdc++.h>
using namespace std;class PalindromePrime {
public:int count( int L, int R );
};int pd(int x){if (x==1) return 0;for(int i=2;i*i<=x;i++)if (x%i==0) return 0;return 1;
}int ppd(int x){if (x<10) return 1;if (x<100) return x/10==x%10;if (x<1000) return x/100==x%10;return 0;
}int PalindromePrime::count(int L, int R) {int ans=0;for(int i=L;i<=R;i++)if (pd(i)&&ppd(i)) ans++;return ans;
}

T2 FourStrings

丑陋的暴力

#include <bits/stdc++.h>
using namespace std;
string cc[4];
int s[4];class FourStrings {
public:int shortestLength( string a, string b, string c, string d );
};int pd(int i,int x,int y){int p1=i,p2=0;while(p1<s[x]&&p2<s[y]){if (cc[x][p1]!=cc[y][p2]) return 0;p1++;p2++;}return 1;
}int pj(int x,int y){for(int i=0;i<s[x];i++)if (pd(i,x,y)) return max(0,s[y]-(s[x]-i));return s[y];
}int www(int i,int j,int k,int l){int w=i,sum=s[i];int v=pj(w,j);if (v) w=j;sum+=v;v=pj(w,k);if (v) w=k;sum+=v;v=pj(w,l);sum+=v;return sum;
}int FourStrings::shortestLength(string a, string b, string c, string d) {cc[0]=a;cc[1]=b;cc[2]=c;cc[3]=d;for(int i=0;i<4;i++) s[i]=cc[i].size();int ans=s[1]+s[2]+s[3]+s[0];for(int i=0;i<4;i++)for(int j=0;j<4;j++)if (j!=i)for(int k=0;k<4;k++)if (k!=i&&k!=j){int l=6-i-j-k;ans=min(ans,www(i,j,k,l));}return ans;
}

T3 PalindromePath

f[i][j]f[i][j]f[i][j]表示000到i" role="presentation" style="position: relative;">iii的路径与111到j" role="presentation" style="position: relative;">jjj的路径相同时的最短路,然后跑下SPFA就行,不过好像这题bfs也一样。

#include <bits/stdc++.h>
using namespace std;
const int N=21;
const int M=401;
const int INF=2e9;
int f[N][N],cnt,head[N],Next[M],v[M],w[M],b[N][N];
struct data{int x,y;
};
queue<data> h;class PalindromePath {
public:int shortestLength( int n, vector <int> a, vector <int> b, string c );
};void add(int x,int y,char z){Next[++cnt]=head[x];head[x]=cnt;v[cnt]=y;w[cnt]=z;
}void spfa(){while(!h.empty()) h.pop();h.push((data){0,1});b[0][1]=1;while(!h.empty()){data q=h.front();h.pop();int x=q.x,y=q.y;b[x][y]=0;for(int i=head[x];i!=-1;i=Next[i])for(int j=head[y];j!=-1;j=Next[j])if (w[i]==w[j]&&f[x][y]+2<f[v[i]][v[j]]){f[v[i]][v[j]]=f[x][y]+2;if (!b[v[i]][v[j]]){b[v[i]][v[j]]=1;h.push((data){v[i],v[j]});}}}
}int PalindromePath::shortestLength(int n, vector <int> a, vector <int> b, string c) {memset(f,0x3f,sizeof f);memset(head,-1,sizeof head);f[0][1]=0;cnt=0;for(int i=0;i<a.size();i++){add(a[i],b[i],c[i]);add(b[i],a[i],c[i]);}spfa();int ans=INF;for(int i=0;i<n;i++) ans=min(ans,f[i][i]);cout<<ans<<endl;for(int i=0;i<n;i++)for(int j=head[i];j!=-1;j=Next[j])ans=min(ans,f[i][v[j]]+1),cout<<f[i][v[j]]<<' ';if (ans>1e9) ans=-1;return ans;
}

TopCoder SRM 677 Div2相关推荐

  1. Topcoder Srm 671 Div2 1000 BearDestroysDiv2

    \(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...

  2. 【TopCoder SRM 551 Div2】Solutions

    [250] Beaver Bindu has some colored bricks. Each color is described by an uppercase letter. Bricks o ...

  3. topcoder SRM 625 DIV2 IncrementingSequence

    由于题目数据量比较小,故可以开辟一个数组存储每个index出现的次数 然后遍历即可 string canItBeDone(int k, vector<int> A){vector<i ...

  4. topcoder srm 628 div2 250 500

    做了一道题,对了,但是还是掉分了. 第二道题也做了,但是没有交上,不知道对错. 后来交上以后发现少判断了一个条件,改过之后就对了. 第一道题爆搜的,有点麻烦了,其实几行代码就行. 250贴代码: 1 ...

  5. TopCoder SRM 577 Div2 1000 EllysCoprimesDiv2

    今天不知道是网卡还是TC的问题一直爆炸,这题还是在vj上交的 插件再次神秘失踪 自己装了插件貌似哪里没弄好..反正很奇怪 辣鸡TC毁我青春 打CF去了 不太懂为什么这种题也是1000 // BEGIN ...

  6. Topcoder SRM 636 div2 1000

    可能个人的代码简写方式和大家的有点不同,读起来有点不适应,还望正在读此篇博客的acmer多多包涵! #include <cstdlib> #include <cctype> # ...

  7. Topcoder SRM 697题解

    Topcoder SRM 697题解 D1L1 分子分母同乘a[i]: \(a_{i}^{b_{i}+1} mod \prod a_i = 0\) 然后我们考虑质因子p,设质因子p在a[i]中出现cn ...

  8. Topcoder SRM 657DIV2

    前言: 像我这样一直在DIV2的弱菜..不知道说什么了. A:一定判断有8个'R',每行 每列只有一个 B题:大概是  int E,int EM,int M,int MH,int H 然后EM可以给值 ...

  9. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  10. topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)

    A题,熊孩子测视力,水题,题意就是判断一下两个数对应位不相同的数字有多少个. #include<bits/stdc++.h>using namespace std;class BearCh ...

最新文章

  1. docker安装Mysql5.7以及远程登陆链接配置
  2. linux socket recv函数 MSG_PEEK标志介绍
  3. HDU3388(二分+容斥原理)
  4. Tensorflow2.0数据类型
  5. css 定义表格最大宽度,css – 表格单元格不接受最大宽度值
  6. JAVA实用教程(第六版)——期末复习1
  7. java添加缓存_实现 Java 本地缓存的方法解析
  8. 制作自己的个人博客网站
  9. 【Power BI--- M 语言】M语言与DAX 语言的区别
  10. Fall 2020 Berkeley cs61a Projects Ants答案
  11. 2019年大前端技术趋势深度解读
  12. a foreign key constraint fails ,外键表中添加数据时无法实现
  13. HAOI2017 简要题解
  14. 【增长黑客读书笔记-范冰】
  15. 阿里云 云速美站 --快速搭建个人网站
  16. AI人工智能入门(浅析AlphaGo的实现)
  17. 大学生职业生涯发展与规划
  18. stata怎么画分类图_掌握Stata这几种常见功能,让统计图案绘制更加精美
  19. PHP 获取服务器ip等详细信息
  20. 手把手教你使用ADB卸载手机内置App软件

热门文章

  1. SpringCloud优点、缺点
  2. Snort企业部署实战
  3. ​ClickHouse在手淘流量分析业务实践
  4. html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
  5. 世界第一代电子计算机诞生在,1、世界上第一台电子计算机诞生于
  6. Java 百度ocr文字识别-发票识别,并在页面显示信息
  7. FaWave(发微)-Chrome上的多微博全能插件
  8. Proxmox VE桌面虚拟化
  9. linux系统编程之进程通信
  10. pandas category数据类型