Topcoder SRM 648 (div.2)
第一次做TC全部通过,截图纪念一下。

终于蓝了一次,也是TC上第一次变成蓝名,下次就要做Div.1了,希望div1不要挂零。。。_(:зゝ∠)_
A. KitayutaMart2
万年不变的水题。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num;
bool flag;
class KitayutaMart2
{
public:
int numBought(int K, int T)
{
m=T/K;
m++;
ans=;
while (m!=)
{
m>>=;
ans++;
}
return ans-;
}
};
B. Fragile2
给一个N个点(3<=N<=20)的无向图,现在不分先后取出其中两个点,使得强连通分量变多,问最多有多少种取法。
因为图实在太小了,所以枚举这两个点即可。用DFS计算连通分支数。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num,G[][],G2[][];
bool flag;
int vis[];
class Fragile2
{
public: void check(int u)
{
int i,j,k;
for (i=;i<n;i++)
{
if (!vis[i] && G2[u][i])
{
vis[i]=;
check(i);
}
}
} int cc(int a,int b)//计算删去结点a,b后的连通度
{
int i,j,k,blk; memset(vis,,sizeof(vis)); for (i=;i<n;i++)//复制一下地图
{
for (j=;j<n;j++)
{
G2[i][j]=G[i][j];
}
} vis[a]=;vis[b]=;//删去结点a,b
for (i=;i<n;i++)
{
G2[i][a]=;
G2[a][i]=;
G2[b][i]=;
G2[i][b]=;
} blk=;
for (i=;i<n;i++)//计算强连通分量
{
if (!vis[i])
{
blk++;
vis[i]=;
check(i);
}
} return blk; } int countPairs(vector <string> mp)
{
int i,j,k;
n=mp.size(); for (i=;i<n;i++)//复制一下地图到G
{
for (j=;j<n;j++)
{
if (mp[i][j]=='N') G[i][j]=;
else G[i][j]=;
}
} num=cc(n,n);//计算一下不修改地图时的强连通分量数 ans=;
for (i=;i<n;i++)//枚举要删除的两个点。
{
for (j=i+;j<n;j++)
{
if (num<cc(i,j)) ans++;
}
}
return ans;
}
};
C.ABC
字符串长为N(3<=N<=30),并且由大写字母A,B,C组成,其中存在K(k<=N*(N-1)/2)对数i和j,满足i<j,s[i]<s[j]。现在给出N,K,试着构造任意一个满足条件的字符串
动态规划,设dp[a][b][c][s]!=0时为当前字符串由a个字母A,b个字母b,c个字母C组成,并且得分为s成立。而dp[a][b][c][s]=0表示由a个字母A,b个字母b,c个字母C组成的字符串不可能得分为s。
转移方程
(1) dp[a+1][b][c][s]=dp[a][b][c][s];
(2) dp[a][b+1][c][s+a]=dp[a][b][c][s]
(3) dp[a][b][c+1][s+a+b]=dp[a][b][c][s]
初始状态为dp[0][0][0][0]=1
因为我们要递归输出,所以设dp[a][b][c][s]=1为由状态1转移过来的,dp[a][b][c][s]=2为由状态2转移过来的,dp[a][b][c][s]=3为由状态3转移过来的
最后递归输出答案即可。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,big,cas,num;
bool flag;
int dp[][][][];
string ans; class ABC
{
public: void out(int x,int y,int z,int s)
{
if (x<=&&y<=&&z<=&&s<=) return;
if (dp[x][y][z][s]==)
{
out(x-,y,z,s);
ans+="A";
}else
if (dp[x][y][z][s]==)
{
out(x,y-,z,s-x);
ans+="B";
}else
{
out(x,y,z-,s-x-y);
ans+="C";
}
} string createString(int n, int c)
{
int i,j,k,l; dp[][][][]=;
for (i=;i<=n;i++)
{
for (j=;i+j<=n;j++)
{
for (k=;i+j+k<=n;k++)
{
for (l=;l<=c;l++)
{
if (dp[i][j][k][l])
{ if (i+j+k==n && l==c)//找到答案,输出
{
out(i,j,k,l);//递归输出
return ans;
} dp[i+][j][k][l]=;
if (l+i<=c) dp[i][j+][k][l+i]=;
if (l+i+j<=c) dp[i][j][k+][l+i+j]=;
}
}
}
}
} return ""; }
Topcoder SRM 648 (div.2)的更多相关文章
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
- [topcoder]SRM 633 DIV 2
第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
- TopCoder SRM 639 Div.2 500 AliceGameEasy
题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数 解题思路: 首先判断n(n+1)/2 = (x+y)是 ...
- TopCoder SRM 642 Div.2 1000 --二分+BFS
题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带 ...
随机推荐
- C# 判断字符串是否可以转化为数字
C# 判断字符串是否可以转化为数字 /// <SUMMARY> /// 判断字符串是否可以转化为数字 /// </SUMMARY> /// <PARAM name=&qu ...
- JS 日常
判断一个字符串是否在另一个字符串里面 var str = 'bblText'; if(str.indexOf("Text") > 0) alert("包含了Tex ...
- JavaScript重复元素处理
判断一个字符串中出现次数最多的字符,统计这个次数 //将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数 var str = "abcdefgadd ...
- DEDE在下载文件时会生成table
当我们在系统内容模型中添加附件类型字段时,前台需要用{dede:field name='字段名'/}来调用. 例如我在后台发布一篇文章,上传一个zip的附件,字段的时间内容是:'/uploads/so ...
- ubuntu 关闭开启防火墙
关闭防火墙: 命令: sudo ufw disable 打开防火墙 命令: sudo ufw enable
- css position 相对定位
<html> <head> <style type="text/css"> h2.pos_left { position:relative; l ...
- Python学习笔记:04函数
Python 函数 通过分而治之的方法解决问题是一种很自然的思路.函数就是将解决特定问题的方法进行抽象. def fibs(num): 'calculate the first num th fib ...
- window.open()提交POST数据
window.open(URL,name,specs,replace) > Details 我们一般都是通过window.open(url, name, specs)以GET方式让浏览器打开 ...
- bzoj4171 or 省队集训day3 chess: Rhl的游戏
[题目描述] RHL最近迷上一个小游戏:Flip it.游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色.每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少 ...
- Autoit实现分割字符串,循环输出元素
#include <MsgBoxConstants.au3> Local $aDays = StringSplit("Mon,Tues,Wed,Thur,Fri,Sat,Sun& ...