07 2013 档案
摘要:三分出两个中间的位置即可。 1 /* 2 两次三分 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 const int maxn = 105;11 const double eps = 1e-8;12 const double pi = acos(-1.0);13 struct Point {14 double x,y;15 };16 Point a,b,c,d;17 double P,Q,R,ans1,ans2;18 19 double dis( Point aa...
阅读全文
摘要:特判标记即可 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const double eps = 1e-8; 8 const double inf = 9999999999.0; 9 const int maxn = 100005;10 struct Point{11 double x,y;12 int flag;13 };14 Point pnt[ maxnres ) break;54 if( pnt[i].flag==pnt[j].fl...
阅读全文
摘要:模板题题意:给定两个凸多边形,求出合并后的面积,这个合并后的面积不包括重叠部分。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn = 155; 8 const int maxm = 155; 9 const double eps = 1e-8; 10 const double pi = acos(-1.0); 11 struct Point{ 12 double x,y; 13 }; 14 struct Line{ 15 ...
阅读全文
摘要:题意:找出第index 个回文数。这题是有规律的,即list[]数组。其次,对于某个 index 可以先精确到 位数 pos,然后在进行分析。1a 1 #include 2 #include 3 #include 4 typedef __int64 int64; 5 int64 list[ 24 ]; 6 int ans[ 240 ]; 7 8 void init(){ 9 list[0] = 0; 10 list[1] = 9; 11 list[2] = 9; 12 list[3] = 90; 13 list[4] = 90; 14...
阅读全文
摘要:简单题。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn = 8; 7 int mat[ maxn ][ maxn ]; 8 bool vis[ maxn ][ maxn ]; 9 bool appear[ 85 ];10 struct node{11 int x,y;12 }num[ 105 ];13 14 void init(){15 memset( appear,false,sizeof( appear ) );16 memset( vis,fa...
阅读全文
摘要:有比这更水的么。。。。。。。。。。。。。。 1 #include 2 int main(){ 3 int n; 4 scanf("%d",&n); 5 while( n-- ){ 6 int sa,sb; 7 scanf("%d%d",&sa,&sb); 8 if( (sa+sb)%2!=0 ){ 9 printf("impossible\n");10 continue;11 }12 int a = (sa+sb)/2;13 i...
阅读全文
摘要:归并排序!!!!!!!!!! 1 /* 2 归并排序+求逆序数 3 */ 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 typedef __int64 int64;10 const int maxn = 500005;11 int64 a[ maxn ],Sort[ maxn ];12 int64 res;13 14 void init(){15 res = 0;16 }17 18 void merge( int L,int R ){19 int mid = (L+R)/2;20 ...
阅读全文
摘要:题意简单。关键:记录每头牛的val值,每次寻找和某头牛匹配的牛时候,可以通过刚刚记录的值来计算。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn = 20005; 6 const int maxm = 1000005; 7 int vis[ maxm ],cow[ maxn ]; 8 int main(){ 9 int n,aim;10 while( scanf("%d%d",&n,&aim)==2 ){11 memset( vis,0,sizeof( vis
阅读全文
摘要:题意:从给定的图中找出某些点,这些点能够消除同一行和同一列的“怪物”。求使得最少的点的位置。关键:要想消除整张的图的妖怪,必须选中n个点(对于n行n列来说)!!!!!!!!!!!做法:对于每一行来说都要被消去,则每一行都至少要有一个 ‘ . ’;另外就是如果这种方法不行,则看每一列。如果每一列都有一个 ' . ',同样也是可行的。 1 #include 2 #include 3 4 const int maxn = 105; 5 char mat[ maxn ][ maxn ]; 6 bool vis[ maxn ][ maxn ]; 7 struct node{ 8 int
阅读全文
摘要:题意:给定n个城市并建造马路是的两两到达,且距离不能超过2因为0 2 #include 3 const int maxn = 1005; 4 int ind[ maxn ]; 5 int main(){ 6 int n,m; 7 while( scanf("%d%d",&n,&m)==2 ){ 8 memset( ind,0,sizeof( ind ) ); 9 int a,b;10 while( m-- ){11 scanf("%d%d",&a,&b);12 ind[a]++;13...
阅读全文
摘要:参考http://blog.sina.com.cn/s/blog_7de5c6210100tm1h.html其实是水题。。。。。。。。。。。。 1 #include 2 #include 3 int mat[ 12 ][ 12 ],temp[ 12 ][ 12 ]; 4 bool flag[ 12 ]; 5 6 void solve(){ 7 memset( temp,0,sizeof( temp ) ); 8 for( int i=0;i<4;i++ ){ 9 for( int j=0;j<10;j++ ){10 if( mat[i]...
阅读全文
摘要:一共2^15个状态比较简单 1 /* 2 2^15 states 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std; 10 11 const int maxn = 10005; 12 const int inf = 99999999; 13 const int dx[]={0,0,1,-1,1,-1,1,-1}; 14 const int dy[]={1,-1,0,0,-1,1,1,-1}; 15 char mat[ 12 ][ 12 ]; 16 struct ...
阅读全文
摘要:题意:给出n个宝物,m个寻宝人。每个寻宝人对n个宝物都有一个估价。从这些估价中挑出某些,是的价值差最小。dfs。。没什么好说的,暴力枚举! 1 /* 2 搜索+枚举 3 */ 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 const int Max = 0x7fffffff; 11 struct Node{ 12 int val[ 10 ]; 13 }a[ 10 ]; 14 struct Node2{ 15 int num[ 10 ]; 16 int c...
阅读全文
摘要:求相交点 1 /* 2 线段相交模板:判相交、求交点 3 */ 4 #include 5 #include 6 #include 7 #include 8 9 const double eps = 1e-8;10 struct Point{11 double x,y;12 };13 Point P_ans;14 double cross( Point a,Point b,Point c ){15 return ( b.x-a.x )*( c.y-a.y )-( b.y-a.y )*( c.x-a.x );16 }17 int solve( Point a,Point b,Po...
阅读全文
摘要:题意看不懂的直接看百度百科对黑白棋的解释。。。做法:分情况讨论,一共8个方向。 1 /* 2 搜索 3 */ 4 #include 5 #include 6 const int maxn = 10; 7 char mat[ maxn ][ maxn ]; 8 const int dx[]={-1,1,-1,1}; 9 const int dy[]={1,-1,-1,1}; 10 11 int max( int a,int b ){ 12 return a>b?a:b; 13 } 14 15 bool in( int x,int y ){ 16 if( x>...
阅读全文
摘要:原文地址:http://blog.sina.com.cn/s/blog_49c5866c0100f3om.html其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途计算...
阅读全文
摘要:简单的BFS 1a 1 /* 2 从起点到终点 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 12 const int maxn = 12;13 const int Max = 99999999;14 char mat[ maxn ][ maxn ][ maxn ];15 int vis[ maxn ][ maxn ][ maxn ];16 const int dx[]={0,0,1,-1,0,0};17 const int dy[]={1,-1,.
阅读全文
摘要:1 #include 2 #include 3 int son[ 1005 ]; 4 int main(){ 5 int n,m; 6 while( scanf("%d%d",&n,&m)==2 ){ 7 for( int i=0;i0 ){13 sum += (int)pow( 1.0*son[i],m );14 }15 }16 }17 else{18 for( int i=0;i<n;i++ ){19 ...
阅读全文
摘要:1 /* 2 RMQ 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 const int maxn = 50005;12 struct Node{13 int ki,ai,id;14 }node[ maxn ];15 int dp[ maxn ][ 24 ];16 int bit[ 32 ];17 int ans[ maxn ][ 3 ];18 19 void init(){20 memset( ans,0,sizeof( ans )...
阅读全文
摘要:简单。手动的实现全排列 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn = 24; 7 8 struct node{ 9 char a,b,aa; 10 int c,d,val; 11 }p[ 5 ],temp; 12 13 struct node2{ 14 node tt[5]; 15 int most; 16 }ans[ 122 ]; 17 18 int cmp( node a,node b ){ 19 re...
阅读全文
摘要:模拟BFS搜索对于一个将要爆炸的点,可能同时由多个点引起。 1 /* 2 模拟搜索过程 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 const int maxn = 8;11 int mat[ maxn ][ maxn ];12 int mytime[ maxn ][ maxn ];13 const int dx[] = {0,0,-1,1};14 const int dy[] = {1,-1,0,0};15 struct node{16 int x,y,ti,...
阅读全文
摘要:一开始TLE了。。。 1 /* 2 模拟 3 */ 4 #include 5 #include 6 const int maxn = 10005; 7 typedef __int64 int64; 8 int64 a[ maxn ]; 9 int main(){10 int64 k;11 int n,k1,k2 ;12 int T;13 scanf("%d",&T);14 int ca = 1;15 while( T-- ){16 scanf("%d%d%d%I64d",&n,&k1,&k2,&k);17 int6
阅读全文
摘要:题意很简单。一次最多多切出一条边!其余的就没什么好说的了 1 import java.util.*; 2 import java.math.*; 3 public class Main{ 4 public static void main( String[] args ){ 5 Scanner cin = new Scanner( System.in ); 6 BigInteger n,m,p; 7 while( cin.hasNext() ){ 8 n = cin.nextBigInteger(); 9 ...
阅读全文
摘要:简单。 1 #include 2 #include 3 const int maxn = 1000006; 4 int a[ maxn ]; 5 int main(){ 6 int ca; 7 scanf("%d",&ca); 8 while( ca-- ){ 9 int n;10 scanf("%d",&n);11 for( int i=0;i=a[ i ] ){17 a[ i+1 ] -= a[ i ];18 a[ i ] = 0;19 ...
阅读全文
摘要:题意:在一个序列中找出最长的某个序列。找出的序列满足题中的条件。关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小。可以利用线段树进行统计,查询。更新的时候利用dp的思想。 1 /* 2 统计某一段内有多少比aim小的数据 3 在更新的时候利用了dp的思想。 4 */ 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 const int maxn = 100005;11 struct node{12 int sum,l,r;13 }anode[ maxn1 )64 ...
阅读全文
摘要:一种比较挫的写法 1 /* 2 模拟 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 using namespace std;14 const int maxn = 105;15 16 int cmp( int a,int b ){17 return a>b;18 }19 20 int main(){21 int ca;22 scanf("%d",&ca);23 while( ca-- ){24 .
阅读全文
摘要:模拟! 1 /* 2 计算过了D天后的日期 3 之前D天的日期 4 */ 5 #include 6 int judge_year( int year ){ 7 if( (year%4==0&&year%100!=0)||(year%400==0) ) 8 return true; 9 else 10 return false; 11 } 12 int judge_month( int mon ){ 13 if( mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==1...
阅读全文
摘要:1 #include 2 int fast_pow( int a,int b,int mod ){ 3 int res = 1; 4 while( b>=1 ){ 5 if( b%2==1 ){ 6 res = res*a%mod; 7 } 8 a = a*a%mod; 9 b/=2;10 }11 return res;12 }13 int main(){14 int n;15 while( ~scanf("%d",&n) ){16 if( ...
阅读全文
摘要:题意:找到一个这样的图,在这个图中,最多有一个环。使得所有的边的和最大。贪心+并查集首先把边排序,然后开始分类讨论。对于边ab(含有两个端点ab)如果a,b是属于两个不同的集合 a b 是两个环中的点,则放弃ab a b 有一个是环,则把环当做另一个的祖先,之后在回溯祖先的时候,能找到该点是在某个环中。。。。。 1 /* 2 找到一个图,使得每一个连通分量最多有一个环 3 */ 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 const int maxn = 10005;10 const int ...
阅读全文
摘要:dp[ i ]表示该状态下得所需花费。 1 /* 2 状态压缩dp 3 dp[i] = min( dp[ i-j ]+cost[ j ] ); 4 由i-j的状态转到i的状态 5 */ 6 #include 7 #include 8 #include 9 #include10 #include11 using namespace std;12 const int maxn = 20;13 const double inf = 99999999.0;14 const int maxm = (11&&cntinf ) continue;50 for( int j=0;jdi...
阅读全文