摘要:瞎搞的思想: 在-2出现奇数次的地方,将序列分成两部分; 注意序列正反各判断一次,去大值;标准思路DP,未写!#include<stdio.h>#include<string.h>int a[10010];int main(){ int _case,n; int i,j,k; int ne,po,por,ans,max; scanf("%d",&_case); for(i=1; i<=_case; i++) { memset(a,0,sizeof(a)); scanf("%d",&n); for(j=0; j
阅读全文
摘要:超时代码:#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[510],b[510],c[510];int main(){ int l,n,m,s; int i,j,k,p,x; int _case=0;; while(scanf("%d %d %d",&l,&n,&m)!=EOF) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,size
阅读全文
摘要:#include<stdio.h>#include<list>using namespace std;list<int>li;list<int>::iterator it;int main(){ int _case,n; scanf("%d",&_case); while(_case--) { li.clear(); scanf("%d",&n); for(int i=1; i<=n; i++) li.push_back(i); int k=0; while(li.size()>
阅读全文
摘要:题解: 求出除数a[0]……a[m-1]的最小公倍数gcd; 由中国剩余定理在【1,gcd】中存在且仅有一个x满足;#include<stdio.h>#include<string.h>int a[11],b[11];int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b);}int main(){ int _case; int n,m,i,j,k; scanf("%d",&_case); while(_case--) { memset(a,0,sizeof(a)); ...
阅读全文
摘要:题意: 上一行的3个音符决定下一行的1个音符题解: 查找与替换 选择的输出的保存方式#include<stdio.h>#include<string.h>#include<vector>#include<map>#include<string>#include<iostream>#include<algorithm>using namespace std;string s1,s2;map<string,char>ma;char a[5];int main(){ int _case,m; int x,
阅读全文
摘要:#include<stdio.h>#include<math.h>int main(){ int _case; double l,a,b; scanf("%d",&_case); while(_case--) { scanf("%lf %lf %lf",&l,&a,&b); if(a<b) { double t=b; b=a; a=t; } double d=sqrt(2.0)*l/2; if(d>=b/2) ...
阅读全文
摘要:题解: 商品单价150,200,350,缩小50倍为3,4,7;(化为更简单的问题模型) 3,4,7可构成3,4,6,7,8,9,10……… 到这里结果呼之欲出^*^;输入的n相应处理:保存余数:yu=n%50; 再缩小50倍:m=n/50;#include<stdio.h>int main(){ int _case,n; scanf("%d",&_case); while(_case--) { scanf("%d",&n); int yu=n%50; int m=n/50; if(m...
阅读全文
摘要:题解: 1.若num_1=0,显然答案为1; 2.若num_1!=0;能产生直到2*num_2+num_1; 的数 3.若2*num_2+num_1>=4,则能产生直到5*num_3+2*num_2+num_i的数#include<stdio.h>int main(){ int a,b,c; while(scanf("%d %d %d",&a,&b,&c)!=EOF&&(a!=0||b!=0||c!=0)) { if(a==0) { printf("1\n"); } else if(2*...
阅读全文
摘要:#include<stdio.h>#include<vector>using namespace std;#define N 1010vector<int>a[N];int fb(){ int i,j,k; int jw; a[1].push_back(1); a[2].push_back(1); for(i=3;i<N;i++) { jw=0; for(j=0,k=0;k<a[i-2].size();j++,k++) { //a[i][j]+=jw; int t=a[i-...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<vector>#define N 65536using namespace std;int prime[N];bool visit[N];struct node{ int x,y;} cpt;vector<node>v;int num=0;int prim(){ memset(visit,true,sizeof(visit)); for(int i=2; i<=N; i++) { if(visit[i]==true) { num++;...
阅读全文
摘要:题解: 递归的思想: n>4后,若在n的基础上再加入一个人,则可将看作: 该人与第一个人交换信息后(+1),第一个人把该人和自己的信息传达给 n-2个人f(n-1),然后该人只需与其他任何一人交换信息即可(+1)#include<stdio.h>int main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0) { if(n<=4) switch(n) { case 1:printf("0\n");break; case 2:printf("5\...
阅读全文
摘要:#include<stdio.h>#include<string.h>#define mod 1000000007int a[10100];int b[10100];int multy(int q,int n){ int base=q; int ret =1; while(n>0) { if(n&1)ret=(long long)ret*base%mod; n>>=1; base=(long long)base*base%mod; } return ret;}int main(){ int _case; ...
阅读全文
摘要:#include<stdio.h>int main(){ int n; int tmp,x; while(scanf("%d",&n)!=EOF&&n!=0) { tmp=0; for(int i=0;i<n;i++) { scanf("%d",&x); tmp^=x; //printf("#%d\n",tmp); } printf("%d\n",tmp); } return 0;}
阅读全文
摘要:#include<stdio.h>int multy(int n){ int base=2; int ret=1; while(n>0) { if(n&1)ret=ret*base; n>>=1; base=base*base; } return ret;}int main(){ int _case,n; scanf("%d",&_case); while(_case--) { scanf("%d",&n); printf("%d\n",multy(n)-1); ...
阅读全文
摘要:题意: 1).1和2是朋友数。 2).如果a和b是朋友数,那么a+b+ab也是朋友数。 3).当且仅当满足(1)或(2)的情形才能判定X是朋友数。(0<=X<=2^30)题解: 观察任意x+1=c+d+cd+1=(c+1)*(d+1) 原始的朋友数只有1,2;c+1,d+1一定为2或3的倍数#include<stdio.h>int main(){ int n; while(scanf("%d",&n)!=EOF) { if(n==0) { printf("NO!\n"); cont...
阅读全文
摘要:题意: 给出a,b,c,k,四个数;由 a,b,c构成一个非递减的等差数列或等比数列;求数列的第k个值; 其中等比数列需要用到快速幂的算法;#include<stdio.h>#define mod 200907long long multy(long long q,long long n)//快速幂运算{ long long cnt=n; long long base=q; long long ret=1; while(cnt>0) { if(cnt&1) ret=ret*base%mod; cnt=c...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[10100];int main(){ int _case,n; int i,j; int po,ne,max,ans; scanf("%d",&_case); for(i=1;i<=_case;i++) { memset(a,0,sizeof(a)); scanf("%d",&n); for(j=0;j<n;j++) scanf(&q
阅读全文
摘要:题解: 知识储备:1.(1+x)^n= 2.斐波那契数列可以用矩阵来表示:mat={1,1,1,0},| 1 1|对应 | f(x+2) f(x+1)| x可以换为mat,而1就是单位矩阵; | 1 0| | f(x+1) f(x) |#include<stdio.h>int n,ma;struct Matrix{ int m[2][2];};Matrix mat,unit;void Initiate(){ mat.m[0][0]=2;//(1+x)的矩阵运算 mat.m[0][1]...
阅读全文
摘要:题解:想办法“剪掉”无限循环小数的“大尾巴”。策略就是用扩倍的方法,把无限循环小数扩大十倍、一百倍或一千倍……使扩大后的无限循环小数与原无限循环小数的“大尾巴”完全相同,然后这两个数相减,“大尾巴”不就剪掉了吗!我们来看两个例子:⑴ 把0.4747……和0.33……化成分数。0.4747……×100=47.4747……0.4747……×100-0.4747……=47.4747……-0.4747……(100-1)×0.4747……=47即99×0.4747…… =47那么 0.4747……=47/99⑵把0.4777……和0.325656……化成分数。0.
阅读全文
摘要:题解: 知识点1:当gcd(x,m)=1时,x^(m-1) mod m=1, 知识点2:矩阵优化(矩阵快速幂求解):| 0 1| | 1 1|
阅读全文
摘要:打表规律猜想代码:#include<stdio.h>#include<string.h>const int N=100;int a[N];bool p[N];int main(){ memset(p,true,sizeof(p)); for(int i=0;i<N;i++) a[i]=i; for(int j=2;j<N;j++) { if(p[j]) { for(int k=2;j*k<N;k++) if(p[j*k])p[j*k]=false; else p[j*k]...
阅读全文
摘要:#include<stdio.h>int main(){ int _case,a; int n,b; scanf("%d",&_case); while(_case--) { scanf("%d%d",&n,&b); a=n; b%=9973; for(int i=0;;i++) { a+=9973; if(a%b==0)break; } printf("%d\n",(a/b)%9973); } return 0...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<vector>#include<algorithm>using namespace std;const int N=1010;bool visit[N];vector<int>prime;int init_prim(){ memset(visit,true,sizeof(visit)); int num=0; prime.push_back(1); for(int i=2; i<=N; i++) { if(visit[i]==true) {
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<vector>#include<algorithm>using namespace std;vector<int>prime;vector<int>::iterator it1,it;const int N=10100;bool visit[N];//int prime[N];int num=0;int init_prim(){ memset(visit,true,sizeof(visit)); prime.push_back(0);
阅读全文
摘要:#include<stdio.h>int cal(int m){ while(m>9) { //int yu=m; int sum=0; for(int i=0;m;i++) { sum+=m%10; m/=10; } m=sum; } return m;}int main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0) { int mul=1; for(int...
阅读全文
摘要:http://ch.vijos.org/Contest/%E8%BE%BD%E5%AE%81%E7%9C%81%E9%98%9F%E4%BA%92%E6%B5%8B%20Weak%201/Problem/Show/%E5%BF%AB%E9%80%9F%E5%B9%82#include<stdio.h>#include<string>#include<iostream>using namespace std;string s;int mod;long long multy(long long q, long long n){ long long cnt = n
阅读全文
摘要:C - Count The Carries时间限制:3000 Ms内存限制:65535 Kb问题描述One day, Implus gets interested in binary addition and binary carry. He will transfer all decimal digits to binary digits to make the addition. Not as clever as Gauss, to make the addition from a to b, he will add them one by one f...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<map>using namespace std;char a[1010];char b[1010];//map<char,char>m;char c[2020];//multimap<char,char>::iterator it;int main(){ int _case,n; char x,y; int al,bl,i,j,ij; scanf("%d",&_case); for(ij=1;ij<=_case;i
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<math.h>const int n=1000100;bool visit[n];int prime[n];int ans[70000];int a[60];//下标所对应的值不为素数,置0int js;int isprime(){ //int N; for(int i=0; i<60; i++) a[i]=i;//初始化自然序列 a[1]=0;//1不为素数 for(int i=2; i<=sqrt(60+0.5); i++) { //对任一不超过...
阅读全文
摘要:转:http://blog.csdn.net/lulipeng_cpp/article/details/7661207#reply这题可以这样来抽象: n对数,大小为1、2、3、...、n。现要求两个1之间有1个数,两个2之间有2个数,以此类推,两个n之间有n个数。 并且,数的次序可以随意的。解决之道: 准备知识: ①n对数,共2*n个数。所以要有2*n个位置来放置这2*n个数。②sum()表示求和运算。 正式解决: ①设k(k=1,2,..,n)放置的第一个位置为ak,第二个位置为bk(两个相同的k)。显然有bk-ak=k+1(假定下一个位置在上一个位置之前)。 ...
阅读全文
摘要:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1159#include<stdio.h>#include<string.h>#include<set>#include<vector>using namespace std;struct node{ int num; int like; friend bool operator <(node a, node b) { if(a.like>b.like)return true; if(a.like==b.like&
阅读全文
摘要:#include<stdio.h>#include<string>#include<string.h>#include<iostream>using namespace std;string s1,s2;int main(){ char a[200]; char b[200]; int i,j,k; while(scanf("%s %s",a,b+1)!=EOF) { b[0]='*';//正确密码的片段(可能首缺) s1=a; s2=b; i=0,j=0,k=0; //s2.push_fron...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<math.h>bool visit[100000];int prime[100000];int n;int x;int init_pri(){ memset(visit,true,sizeof(visit)); int num=0; for(int i=2;i<=n;i++) { if(visit[i]==true) { num++; prime[num]=i; } for(int j...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{ int x,y; int time; friend bool operator<(node a,node b) { if(a.time>b.time)return true;//越小越优先 return false; }}in,im;int f[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};int n,m;int startx,starty,ans;...
阅读全文
摘要:1.奇数的回文串和偶数的回文串统一起来考虑先在每两个相邻字符中间插入一个分隔符,当然这个分隔符要在原串中没有出现过。一般可以用‘#’分隔。这样就非常巧妙的将奇数长度回文串与偶数长度回文串统一起来考虑了(见下面的一个例子,回文串长度全为奇数了)2.用一个辅助数组P记录以每个字符为中心的最长回文串的信息。3.P[id]记录的是以字符str[id]为中心的最长回文串,当以str[id]为第一个字符,这个最长回文串向右延伸了P[id]个字符原串:w aa bwsw f d 新串: # w # a # a #b # w # s # w # f # d #辅助数组P: 1 2 1 2 3 2 1 ...
阅读全文
摘要:#include<stdio.h>#include<string.h>#include<math.h>int m;int a[4]={2,3,5,7};int b[4]={1,3,7,9};int c[10];int number;bool visit[101000];int prime[100000];int n=100000;int init_prim(){ memset(visit,true,sizeof(visit)); int num=0; for(int i=2;i<=n;i++) { if(visit[i]==true) { ...
阅读全文
摘要:#include<stdio.h>int w,h,ans;char a[30][30];int d[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int dfs(int i,int j){ int ii,jj; for(int k=0;k<4;k++) { ii=i+d[k][0]; jj=j+d[k][1]; if(ii<h&&jj<w&&ii>=0&&jj>=0&&a[ii][jj]=='.') { ans++; a[ii][jj]='#&
阅读全文
摘要:#include<stdio.h>#include<string.h>char a[110][110];int f[8][2]={{0,1},{0,-1},{-1,1},{-1,0},{-1,-1},{1,-1},{1,0},{1,1}};int m,n;int dfs(int i,int j){ for(int k=0;k<8;k++) { int x=i+f[k][0]; int y=j+f[k][1]; if(x>=0&&y>=0&&x<m&&y<n&&a[x][y]==
阅读全文
摘要:http://ch.vijos.org/Contest/%E6%B9%96%E5%8C%97%E7%9C%81%E9%98%9F%E4%BA%92%E6%B5%8B%20Week1/Problem/Show/%E4%BF%A1%E5%BF%83%E9%A2%98#include<stdio.h>#include<math.h>long long mod,t;long long sum(long long x,long long y){ t=x+y; if(x%2==0)x/=2;//x&1==0 不能用 else if(y%2==0)y/=2; else t/=
阅读全文
摘要:http://ch.vijos.org/Contest/%E3%80%8CAdera%203%E3%80%8D%E6%9D%AF%E7%9C%81%E9%80%89%E6%A8%A1%E6%8B%9F%E8%B5%9B/Problem/Show/%E5%8F%8B%E8%B0%8A%E5%9C%88(Easy)错误的dp初始化代码View Code #include<stdio.h>#include<string.h>int a[20100];int dp[20100];int main(){ int n,max,m; int i,j; while(scanf(&quo
阅读全文
摘要:http://ch.vijos.org/Contest/%E7%99%BD%E8%89%B2%E6%83%85%E4%BA%BA%E8%8A%82%E6%AC%A2%E4%B9%90%E8%B5%9B%20-%20Day1(Easy)/Problem/Show/%E7%88%B1%E6%83%85%E6%B5%8B%E8%AF%95#include<stdio.h>const long long mod=100007;long long multy(long long q, long long n){ long long cnt = n; long long base = q; .
阅读全文
摘要:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=113题意: 从1~m的m个数中选出n(nint n,m, a[10];bool bz[10];//标记数字是否已经被用过int DFS(int k){ if (k==n)//搜出来的长度等于要求的长度,输出该序列,由于是从小到大搜索的所以输出的时候也是从小到大的 { for (int i=0; i<n; i++) printf("%d",a[i]); printf("\n"); } else//不等于要求的长度,继...
阅读全文
摘要:#include<stdio.h>#include<vector>#include<string>#include<iostream>#include<algorithm>using namespace std;vector<string>v;string s;bool cmp(string a,string b){ int al=0,bl=0; for(int i=0;i<a.size();i++) for(int j=i+1;j<a.size();j++) if(a[j]<a[i])al++; for
阅读全文
摘要:题意及解题思路: 输入m,a,b;输出c,d 满足条件: 1.找出两个质数c,d。(大素数表) 2.满足c*d为不大于m的最大值,(循环判断) 先找最大的d,然后循环找出(m/d条件下)最大的c, 还得在用一次d*c最大的条件,退出循环条件为找到的c》d; 3.并满足 d>=c&&a*d<=b*c(判断条件)#include<stdio.h>#include<math.h>const int M=150000;int a[M];int isprime(){ for(int i=0;i<M;i++) a[i]=i; a[1]=0; f..
阅读全文
摘要:http://acm.cug.edu.cn/JudgeOnline/problem.php?id=1011#include<stdio.h>#include<string>#include<vector>#include<string.h>#include<algorithm>#include<iostream>using namespace std;vector<string>v;vector<string>::iterator it;int main(){ string s,si; char s
阅读全文
摘要:#include<stdio.h>int main(){ int n; int sum; while(scanf("%d",&n)!=EOF&&n!=0) { int a[4]= {1,0,0,0}; int b[4]= {1,0,0,0}; sum=0; for(int i=2; i<=n; i++) { a[0]+=b[1]; a[1]=b[2]; a[2]=b[3]; a[3]=a[0]; ...
阅读全文
摘要:题解: 对Alice和Bob的数据一起排序,再贪Alice离Bob最进的矩形 做了整整一个下午,我晚饭后找了一会,还是没发现, 一筹莫展之际,只有使出杀手锏(求教飞机哥!!!) 正在注释代码准备求助时,终于的发现了坑货的小bug!!!! ( bool cmp()中忘写了return false;以前使用int cmp()) 1。起初是直接查找TLE,各种换数据结构。 2。数组开100005提交,Runtime Error (ACCESS_VIOLATION) 又百度,此错误好像有爆内存的原因(明明就够题目数据量的??)。 3。最...
阅读全文
摘要:#include<stdio.h>#include<algorithm>#include<string>#include<vector>#include<deque>#include<list>#include<string.h>#include<set>#include<iostream>using namespace std;string s1,s2,si;struct node{ int ii;//物品编号 int value;//价值 set<string>s;//描
阅读全文
摘要:#include <stdio.h>int main(){int a=90;printf("%d%%\n",a);return 0;}这样就会在屏幕上得到 90%
阅读全文
摘要:#include<stdio.h>#include<vector>#include<string>#include<fstream>#include<algorithm>//include count#include<iostream>using namespace std;vector<string>v;vector<string>::iterator it;bool cmp(string s1,string s2){ if(s1.length()<s2.length())return tr
阅读全文
摘要:#include<stdio.h>#include<fstream>#include<iostream>using namespace std;int main(){ ifstream cin("B.txt"); int n; char a[100]; //while(scanf("%d",&n)!=EOF) while(cin>>n&&n>=0) { int m=n; int js=0; for(int i=0; m; i++) { if(m&1)a[i]='
阅读全文
摘要:http://acm.whu.edu.cn/land/problem/detail?problem_id=1462#include<stdio.h>#include<list>#include<deque>//TLE//#incldue<fstream>#include<iostream>using namespace std;//list<int>la,lb,lc;//list<int>::reverse_iterator rit;//list<int>::iterator it;deque<
阅读全文