题意: 给定正整数 a 和 b,q次询问 \(l_i,r_i\) ,输出满足 \(l_i\le x \le r_i,(x\%a\%b)\neq (x\%b\%a)\) 的 \(x\) 的个数 a,b <= 200,l,r <= 1e18 思路: \(x\%a\%b=(x+lcm(a,b))\%a\%b\),即 “每个数是否满足条件” 以 lcm 为周期。预处理 \([1,lcm]\) 即可。 #include <bits/stdc++.h
Content 浓缩版:将牌库里的 \(k\) 张牌洗 \(m\) 次,然后将其分发给 \(n\) 个玩家,问第 \(p\) 号玩家的 \(4\) 张牌都有哪些。 完整版:Link Solution 直接对照题意模拟一遍即可。反正写过近 \(200\) 行的模拟代码,这样的模拟还算是简单的了。 我们在输入完 \(n,k,m,p\) 以后可以直接判断
Content 有一家有若干个保险柜的银行,从左往右分别标号为 \(1,2,3,...\)。 有 \(n\) 张钞票,其中第 \(i\) 号钞票在第 \(x_i\) 号保险柜里。 一个小偷在 \(a\) 号保险柜,他想偷走保险柜里面尽可能多的钞票。 有两个警察,一个警察在 \(b(b<a)\) 号保险柜处,一个警察在 \(c(c>a)\) 处,他
#include<stdio.h> int main(void) { int a,b,c; printf("请输入三个整数:"); scanf("%d%d%d",&a,&b,&c); if(a>=b) { if(b>=c) printf("从小到大排列为:%d,%d,%d",c,b,a); if(b<c) { if(
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e2+5; 4 int G[N][N]; 5 int main() 6 { 7 int n,m; 8 scanf("%d%d",&n,&m); 9 for(int i=1;i<=m;i++) 10 { 11 int u,v,w; 12
#include <iostream> #include <cstdio> using namespace std; const int N = 1010; int n, m, q; int a[N][N], s[N][N]; int main() { scanf("%d%d%d", &n, &m, &q); for ( int i = 1; i <= n; i++ ) for ( int j
试题 算法训练 跳马 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 一个8×8的棋盘上有一个马初始位置为(a,b),他想跳到(c,d),问是否可以?如果可以,最少要跳几步? 输入格式 一行四个数字a,b,c,d。 输出格式 如果跳不到,输出-1;否则输出最少跳到的步数。 样例输入
注:作者画图才开始哈,请多多包涵QAQ 法一: int main() { int m = 0; int n = 0; scanf("%d%d", &m, &n); m = m + n; n = m - n; m = m - n; printf("%d %d", m, n); return 0; } 法二: int main() { int m = 0; int n = 0; scanf("%d%d",
计算x年到y年之间的对称日 思路: 先判断每年是不是闰年,然后计算每年每月每天,再将年月日三个数连在一起,进行判断是不是对称日,再输出这一天,在循环中设置变量来求和。 代码: #include<stdio.h> int main(){ int x,y,year=0,month=0,day=0; int m=0,n=0,j=0,a=0,b=0,c=0,t=0; scanf
#include<iostream> #include<cstring> using namespace std; int data[105][205],a[3],len[105]; void Plus(int i){ int k,l; for(k=i-3;k<i;k++){ for(l=0;l<len[k];l++){ data[i][l] += data[k][l]; if(data[i
1 #include <stdio.h> 2 int main(void) 3 { 4 int n,m,l; 5 scanf("%d%d%d",&n,&m,&l); 6 long int a[n][m],b[m][l]; 7 long int c[n][l]; 8 int i,j; 9 for(i=0;i<n;i++) 10 for(j=0;j<m;j++)
在此之前先看看一般的约瑟夫问题 发现这个题唯一不一样的就是m,只要在递推的时候不断的更换m数组即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int n,k; int a[105],m[105],f[105]; int main(){ while(~scanf("%d%d",&n
在内容过程中,将写内容过程中重要的内容收藏起来,下面的内容内容是关于杭电ACM 3790:最短路径问题C++解法的内容,希望能对大伙有些好处。 #include #include #include using namespace std; #define MAX 1002 #define inf 999999 int map[MAX][MAX],cost[MAX][MAX]; int n; { int
目录 求最小公倍数的三种方法 求最大公因数的补充: 谁都不能阻挡你成为更优秀的人。 废话不多说,直接上代码。 求最小公倍数的三种方法 //法一:暴力(定义)求解 //最小公倍数的本质是一个最小的能同时被两整数整除的自然数 int main() { int m = 0; int n = 0; scanf("%d%d",
You are given an array consisting of nn integers a1a1, a2a2, ..., anan. Initially ax=1ax=1, all other elements are equal to 00. You have to perform mm operations. During the ii-th operation, you choose two indices cc and dd such that li≤c,d
思想: 模拟+枚举 以T为单位的枚举一定会超时; 若以m为单位 比较复杂 以 n 为单位 且为外侧循环, 以它的订单为内层循环(sort一下) #include <bits/stdc++.h> using namespace std; #define ri register int #define M 100005 vector <int> p[M]; int n,m,T; int main(){
【题目描述】 某幼儿园里,有5个小朋友编号为1、2、3、4、5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接
原题链接 题目大意:给定n个数据a1,a2,a3,a4……an,求出bi,使得∑ai*bi = 0 解题思路: 考虑一种情况:a1对应的b1 = - b2 ,a2 对应的b2 = a1,那么a1b1 + a2b2 = -a1b2 + a1b2 = 0 那么对n为偶数的情况考虑,只需要对每两个a进行如上操作即可 对n为奇数的情况,考虑讲三个a中的两
看完题立刻想到了对3取模,分别判断0/1。 然而想到了之前草率提交,掉分的惨痛经历,于是打算多进行几次演算,做一下充分性证明。 观察到d(a1,a2,a3)=abs(a1+a3-2*a2),想到:是否可以将(a1+a3)视为一个"整体"(num1),(2*a2)视为另一个"整体"(num2),最小化两者的差值。 考虑到每次从num1取值
题目链接 思路: 对于排列\(1,2,3...k,k+1...n\)分三种情况: 对前\(k\)个全排列,后\(n-k\)个形成最长递增子序列长度\(>=n-k-1\)的序列,方案数为\(k![(n-k)(n-k-2)-2]\)。 在前\(k\)个数中选一个数与\(k+1\)互换时,方案数为\(k![k*(n-k)]\)。 在\([k+2,n]\)中选一个数与\([1,k]\)互换时
The Solutions of Hydro.ac-Undertale U1000U1001U1002U1003U1004U1005U1006U1007enclosure U1008,U1009U1010,U1011U1012U1013enclosure U1014 Hydro.ac-Undertale U1000 #include<bits/stdc++.h> using namespace std; int main(){ printf("DETERMINATION
C语言中的格式字符 %d是用来输出十进制整型数据的实际长度输出; %c是以字符形式输出,只输出一个字符; %f是以小数形式输出单、双精度度数,隐含输出6位小数。 %c 单个字符 %d 十进制整数(int) %ld 十进制整数(long) %f 十进制浮点数(float) %lf 十进制浮点数(double) %o 八进
#include<stdio.h> int main() { int l,m; scanf("%d%d",&l,&m); int tree[l+1],i,j; for(i=0;i<=l;i++) { tree[i]=1; } int x1,x2; for(i=0;i<m;i++) { scanf("%d%d",&x1
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main() { int a = 0; int b = 0; int c = 0; scanf("%d%d%d", &a, &b, &c); if (a < b) { int tmp = a; a = b;
“21天好习惯”第一期-21 今天又巩固了一下循环语句,下面是小编我今天的学习成果; #include<stdio.h> int main() { int a=1,b=5,c,d; int N; printf("please enter d c N:"); scanf("%d%d%d",&d,&c,&N); for(;d