- 博客(21)
- 收藏
- 关注
原创 CCF-工资计算
思路: 因为T<=10000,所以税前极限金额肯东不超过1000000(设个比较大的数字就行),然后逐一计算即可,真的不知道自己当时怎么这么蠢,高中的知识都忘光了,还是心态太差,一到考试就心急,脑子一片浆糊#include<cstdio>int main(){ int t; scanf("%d",&t); if(t<=3500){ printf("%d",
2016-12-27 20:21:17 1367
原创 数论
typedef long long LL; //最大公约数 LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b); } //最小公倍数 LL lcm(LL a,LL b){ return a/gcd(a,b)*b;}//素数筛 void sieve(int n){ int m=(int)sqrt(n+0.5);
2016-12-12 22:52:46 405
原创 XDU 1098 突击数论前的xry111
原题链接,点击此处 欧拉函数:φ(N)表示对一个正整数N,欧拉函数是小于N且与N互质的数的个数 通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn) 其中p1, p2……pn为x的所有质因数,x是不为0的整数。 注意:将n分解为最简质因数,每种质因数只用一次。 比如 12 = 2*2*3,那么 φ(12) = 12 * (1-1/2)
2016-12-12 22:31:35 483
原创 HDU 5970 最大公约数
原题链接,点击此处 思路:考虑f(i,j)的含义,它表示辗转相除次数c和gcd(i,j)的平方的乘积。 因为对任意1<=t<=n,均有t%j=i(0<=i<=j-1),所以可以对m,即对j进行暴力。对i的值分情况考虑,由性质可得f(i+k∗j,j)=f(j,(i+k*j)%j)=f(j,i%j)和f(i,j)=f(j,i%j)。打表观察: eg1:i为模9余7的数 ,j为9,则i*j/f(i,
2016-12-09 22:03:23 659
原创 HDU 5969最大的位或
第一步,首先通过给的第一,第二,第三组数据,可以发现一个规律,那就是右边界肯定要算进去,比如[1,10]那么10一定要算进去。 即得最后结果中或值最大的两个数中的第一个数x; 为什么呢?我们可以稍微证明一下:假设右边界为r,考虑r-1.第一种情况,如果r-1的二进制位数比r少一位,那么无疑应该选r;如7(0111)和8(1000) 如果r-1的二进制位数和x相同,那么给(r-1)加上的1肯定会
2016-12-08 21:47:09 448
原创 CCF-订票系统
#include<stdio.h>#include<cstring>int main(){ int i,j,k,a,n,c[20][6]; int max[20]; memset(c,0,sizeof(c)); scanf("%d",&n); while(n--) { for(i=0;i<20;i++){
2016-11-09 20:44:12 495
原创 CCF-交通规划
#include<cstdio>#include<queue>#include<vector>#define maxn 100005#define inf 0x7fffffff int n,m;using namespace std;struct Point{ int u; int dist; Point(int uu,int d){ u=u
2016-11-09 20:42:03 597
原创 xdoj-1003
#include<bits/stdc++.h>using namespace std;long long mpow(long long a,long long b){ long long ans=1; if(b==0) return 1; while(b){ ans=ans*a; b--; } re
2016-11-09 20:41:22 350
原创 CCF-炉石传说
#include<bits/stdc++.h>using namespace std;typedef struct T{ int L ; int A ; }Doll;Doll player[2][8];int s[2];void summon(int who,int pos,int a,int l) { if(pos>0){ s[who]++;
2016-11-09 20:40:20 967
原创 文章标题
#include<cstdio>#define N 1001#define Mod (long long)(1e9+7)using namespace std;long long n,m;long long dp[N][N];int main(){ for(int i=1;i<=1000;i++) dp[i][1]=1; for(int i=1;i<=1
2016-11-09 18:08:42 260
原创 xdoj-1055
#include<stdio.h>#include<cstring>int main(){ //freopen("orz.txt","w",stdout); int i,j,n,m,x,y; while(scanf("%d%d",&n,&m)!=EOF) { int c[n][m]; int d[n*m]; mem
2016-11-09 18:07:52 452
原创 xdoj-1056
解法一:简单搜索肯定被踢,只是单纯的想写一发搜索练练手#include<cstdio>#include<cstring>#define maxn 1005using namespace std;int i,j,k,n,ans;int c[maxn][maxn];int dir[2][2]={{0,1},{1,0}};bool can(int i,int j){ if(i<0|
2016-11-09 18:06:49 323
原创 xdoj-1022
解法一:数论筛法+前缀和//其实题目中f[n]的值可理解为存在多少个整数对使a*b<=n #include<cstdio>#define N 1007#define maxn 1000005using namespace std; int f[maxn];void Procede(int n)//预处理 { for(int i=1;i<maxn;i++){ fo
2016-11-09 18:03:11 421
原创 xdoj-1011
解法一被踢#include<stdio.h>int main(){ long long n; //freopen("in.txt","r",stdin); while(scanf("%lld",&n)!=EOF){ long long i=1,s=0; while(s<=n){ s=i*i;
2016-11-09 18:00:58 391
原创 xdoj-1040
#include<bits/stdc++.h>using namespace std;int main(){ int a,b,c,n; scanf("%d",&n); int x,y,z; while(n--) { scanf("%d%d%d",&x,&y,&z); //注意A,B,C均为正整数 if((x
2016-11-09 17:59:12 314
原创 xdoj-1109
#include<stdio.h>#define N 10007#define maxn 1000005int dp[maxn];int main(){ dp[1]=1,dp[2]=2,dp[3]=4; for(int i=4;i<maxn;i++) dp[i]=dp[i-1]%N+dp[i-2]%N+dp[i-3]%N; int n; wh
2016-11-09 17:58:10 342
原创 xdoj-1042
#include<bits/stdc++.h>#define maxn 105using namespace std;int c[maxn];int main(){ int n,T; double ans; scanf("%d",&T); while(T--) { memset(c,0,sizeof(c)); scan
2016-11-09 17:55:43 317
原创 xdoj-1109
#include<cstdio>#include<cstring>const int mod=10007;struct Mat{ int mat[3][3];};Mat Mult(Mat a,Mat b){ Mat c; memset(c.mat,0,sizeof(c.mat)); for(int i=0;i<3;i++){ for(in
2016-11-09 17:53:43 282
原创 xdoj-1111
对于一排n个正方形,有f(n)种方案达成目标,若第n个块是白色,则有f(n-1)种方案,若第n个块是黑色,则第n-1个块必为白色,那么有f(n-2)+n-2种方案。 则f(n)=f(n-1)+f(n-2)+n-2 。 写成矩阵形式: (http://img.blog.csdn.net/20161011211956406) 例如:(i,j)表示i个空涂j个的种类数
2016-11-09 17:52:36 289
原创 xdoj-1031-找规律
#include<stdio.h>#define maxn 1005int c[maxn][maxn];int gcd(int a,int b){ return b==0?a:gcd(b,a%b);} int main(){ int n,m,ans,tmp; while(scanf("%d%d",&n,&m)!=EOF){ ans=0;
2016-11-09 17:49:42 469
原创 xdoj-1032-找规律
#include<cstdio>typedef long long ll;const ll mod=10007;ll feima(ll a,ll b){ ll c=1; while(b) { if(b&1) c=c*a%mod; a=a*a%mod; b=b>>1; } return
2016-11-09 17:48:07 435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人