2017年江西理工大学C语言程序设计竞赛(高级组)
问题 A: 求近似值
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
using namespace std; #define ll long long
const ll M = 9e18;
const ll MOD = ;
struct Node {
ll m[][];
}; ll a[]; Node mul(Node a, Node b) {
Node A;
for(int i = ; i < ; ++i) {
for(int j = ; j < ; ++j) {
A.m[i][j] = ;
for(int k = ; k < ; ++k) {
A.m[i][j] = (A.m[i][j] + a.m[i][k] * b.m[k][j] % MOD) % MOD;
}
}
}
return A;
} ll q(Node a, ll num) {
Node AA;
AA.m[][] = AA.m[][] = ;
AA.m[][] = AA.m[][] = ;
while(num) {
if(num & ) AA = mul(AA, a);
a = mul(a, a);
num >>= ;
}
return 2LL * AA.m[][] - ;
}
int main() {
ll n;
int t;
scanf("%d", &t);
while(t--) {
scanf("%lld", &n);
n %= ;
if(n > ) n = *-n-;
if(a[n]){
printf("%lld\n", a[n]);
continue;
}
Node A;
A.m[][] = A.m[][] = ;
A.m[][] = ;
A.m[][] = ;
//printf("%lld\n", q(A, n));
a[n] = q(A, n);
printf("%lld\n", a[n]);
}
return ;
}
超级模法师
- n % i = n - n / i * i (n / i 表示下取整)
- 所以所求 = n * m - sum(n/i * i) (i从1到m)
- 由于,n的第j个因子和第j+1个因子间(左开右闭),的任意数k,有n / k = n / n的第j+1个因子
- 所以我们用sqrt(n)的时间求出所有n的因子即可,然后相邻的两个用下等差数列求和公式很容易就能算出
- 求得过程有些坑点需要注意,首先是注意m的大小,m的大小可能位于n的两个因子之间
- 然后是,求和公式那里也需要先求下余,再算乘法,这样就需要注意因为有个除2,所以要判断用哪一项能整除2,除完后再求余
#include <iostream>
#include <stdio.h>
#include <cmath>
#define ll long long
using namespace std;
const int N = 1e7;
const ll mod = 1e9+;
ll n , ans = , m , a , b; int main(){
ll tmp = ;
scanf("%lld%lld",&n,&m);
if(m > n){
ans = ((m - n) % mod) * (n % mod) % mod;
m = n;
}
if(m <= N){
for(int i = ; i <= m ; i ++){
ans += (n % i);
} }else{
for(int i = ; ; i ++){
ll x = n / i , y = n / (i + ) + ;
if(y > m){
continue;
}else if(x >= m && y <= m){
ans += (((n % m) + (n % y)) % mod) * ((((m - y + ) % mod) * tmp) % mod) % mod; }else{
ans += (((n % x) + (n % y)) % mod) * ((((x - y + ) % mod) * tmp) % mod) % mod;
}
if(y <= N){
for(int k = ; k < y ; k ++){
ans += (n % k);
}
break;
}
}
}
printf("%lld\n",ans % mod);
}
Combinationaritilize
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
int num;
scanf("%d",&num);
if(num&(num-))
printf("no");
else
printf("yes");
return ;
}
字符串最大表示
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int Next[];
char s[];
int main(){
int T;
scanf("%d",&T);
while(T --){
scanf("%s",s);
int tlen = strlen(s);
int j, k;
j = ; k = -; Next[] = -;
while(j < tlen){
if(k == - || s[j] == s[k])
Next[++j] = ++k;
else
k = Next[k];
} printf("%d\n",tlen / (tlen - Next[tlen]));
}
}
DATE ALIVE
二分图匹配,然后上模版
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
const int maxn = *;
int n, x, y, sum;
bool vis[maxn];
int use[maxn];
vector<int> v[maxn];
bool Find(int x){
for(int i = ; i < v[x].size(); ++i){
int xx = v[x][i];
if(!vis[xx]){
vis[xx] = true;
if(!use[xx] || Find(use[xx])){
use[xx] = x;
return true;
}
}
}
return false;
}
int main(){
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for(int i = ; i < k; ++i){
scanf("%d%d", &x, &y);
v[x].push_back(y+);
}
memset(use, , sizeof(use));
for(int i = ; i <= n; ++i){
memset(vis, false, sizeof(vis));
if(Find(i)) sum ++;
}
printf("%d\n", sum);
for(int i = ; i <= x; ++i){
v[i].clear();
}
//printf("%.3lf\n", (double)clock()/CLOCKS_PER_SEC);
return ;
}
敏感的小明
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
int flag[];
int main(){
memset(flag,,sizeof(flag));
int n;
cin>>n;
int num;
cin>>num;
for(int i=;i<num;i++){
int x;
cin>>x;
flag[x]=;
}
for(int i=n;;i++){
int j=i;
int fg=;
if(flag[j%]==){
fg=;
}else{
do{
int y=j%;
if(flag[y]==){
fg=;
break;
}
j=j/;
}while(j!=);
}
if(fg==){
cout<<i<<endl;
break;
}
}
return ;
}
初中数学
#include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int a[][];
int main(){
int n,m;
cin>>n>>m;
int cnt=;
for(int i=;i<n+;i++){
for(int j=;j<m+;j++){
cin>>a[i][j];
if(a[i][j]!=){
cnt+=;
}
}
}
for(int i=;i<n+;i++){
for(int j=;j<m+;j++){
if(a[i][j]-a[i-][j]>){
cnt+=a[i][j]-a[i-][j];
}
if(a[i][j]-a[i+][j]>){
cnt+=a[i][j]-a[i+][j];
}
if(a[i][j]>a[i][j-])
cnt+=a[i][j]-a[i][j-];
if(a[i][j]>a[i][j+])
cnt+=a[i][j]-a[i][j+];
}
}
cout<<cnt<<endl; }
2017年江西理工大学C语言程序设计竞赛(高级组)的更多相关文章
- 2017年江西理工大学C语言程序设计竞赛(初级组)
问题 A: Petr的盒子(初) #include <iostream> #include <stdio.h> #include <algorithm> using ...
- 2014江西理工大学C语言程序设计竞赛高级组题解
1001 Beautiful Palindrome Number 枚举回文数字前半部分,然后判断该数字是否满足,复杂度为O(sqrt(n))! 1002 Recovery Sequence 本题的核 ...
- 2018年江西理工大学C语言程序设计竞赛(高级组) 三角平方数
题目描述 三角数:形如图a,圆点摆放成等边三角形的数字,则为三角数. (图a) 平方数:形如图b,小方块摆放成正方形的数字,则为平方数. (图b) 那么如果一个数字既是三角形数又是平方数,则称为三角平 ...
- 2018年江西理工大学C语言程序设计竞赛高级组部分题解
B Interesting paths 考察范围:组合数学 此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条 ...
- 2018年江西理工大学C语言程序设计竞赛(初级组)一
C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html A: 逆序对 时间限制: 1 s 内存限制: ...
- 2014江西理工大学C语言程序竞赛高级组
Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...
- 2016年江西理工大学C语言程序设计竞赛(高级组)
问题 A: jxust 解法:争议的问题(是输入整行还是输入字符串),这里倾向输入字符串,然后判断是否含有jxust就行 #include<bits/stdc++.h> using nam ...
- 2016年江西理工大学C语言程序设计竞赛(初级组)
问题 A: 木棒根数 解法:把所有的情况保存下来,加一下就好 #include<bits/stdc++.h> using namespace std; map<char,int> ...
- 2015年江西理工大学C语言程序设计竞赛(高级组)
A 解法:DP+二分 dp[i]=max(dp[i],dp[j]+p[i].v)(i>j) dp[i]表示建立i点之后能够获得的最大值 int n,M; struct node { int l, ...
随机推荐
- ACM学习历程—Hihocoder 1233 Boxes(bfs)(2015北京网赛)
hihoCoder挑战赛12 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There is a strange storehouse in PKU. In this ...
- python【事物 】【数据库锁】
1.数据库事物 1. 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一 ...
- VC6++常用快捷键
VC6快捷键大全(转载) VC6快捷键大全,记在这里,方便查阅.F1: 帮助Ctrl+O :OpenCtrl+P :PrintCtrl+N :NewCtrl+Shift+F2 :清除所有书签F2 :上 ...
- cloudera上面安装Spark2.0
Cloudera默认值是提供Spark1.6的安装,下面介绍如何来安装spark2.1 1. csd包:http://archive.cloudera.com/spark2/csd/ 2. parce ...
- Hive安装配置要点
官网下载安装包: 在Profile下面定义HIVE_HOME以及HADOOP_HOME,然后在PATH下面添加HOME/bin目录,用于在命令行直接敲beeline,hive即可执行命令: 需要在ha ...
- BZOJ2212:[POI2011]Tree Rotation
浅谈线段树合并:https://www.cnblogs.com/AKMer/p/10251001.html 题目传送门:https://lydsy.com/JudgeOnline/problem.ph ...
- python 3中对list进行sort时,返回值为None
进行在用python的list结构时, 发现一个问题: methods = ['blogger.deletePost', 'blogger.get ...
- Poj 1017 Packets(贪心策略)
一.题目大意: 一个工厂生产的产品用正方形的包裹打包,包裹有相同的高度h和1*1, 2*2, 3*3, 4*4, 5*5, 6*6的尺寸.这些产品经常以产品同样的高度h和6*6的尺寸包袱包装起来运送给 ...
- 一个能获取如果hash或search是中文的内容小例子
代码: (function () { var url = "http//baidu.com#a=你好&b=world"; var url1 = "http//ba ...
- char与wchar_t数据类型
转自:http://blog.itpub.net/27634692/viewspace-752200/ 有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚. ...