记录洛谷刷题C语言qaq
比赛时在做什么?有没有空?可以来开 longlong 吗?
kid 一脸疑惑地看着 Elgo87,Elgo87 说,通关就告诉你 …
kid 发现了一个函数 f ( x ) f(x) f(x),它表示除 x x x 本身之外, x x x 的最大约数( x x x 为大于 1 1 1 正整数)。
下面是一些例子:
kid 还发现了两个数 L , R L,R L,R,你需要帮他求对于 L ∼ R L\sim R L∼R 中的每一个数 x x x, f ( x ) f(x) f(x) 的最大值,作为通关密码。
注意, L ∼ R L\sim R L∼R 包括 L L L 和 R R R。
你只需要告诉他答案,剩下的操作就交给 Elgo87 吧!
一行两个整数 L , R L,R L,R,意义如题目描述。
一行,表示对于 L ∼ R L\sim R L∼R 中每个数 x x x, f ( x ) f(x) f(x) 的最大值。
12 17
8
【样例解释】
在 12 ∼ 17 12\sim17 12∼17,也就是 12 , 13 , 14 , 15 , 16 , 17 12,13,14,15,16,17 12,13,14,15,16,17 这几个数中,除这些数本身之外的最大因数分别是 6 , 1 , 7 , 5 , 8 , 1 6,1,7,5,8,1 6,1,7,5,8,1,故最大值为 8 8 8。
【数据范围】
本题采用 S u b t a s k \tt Subtask Subtask 捆绑测试。 即你需要通过一个 S u b t a s k \tt Subtask Subtask 中的所有测试点才能得到这部分的分数。
C语言
#include
#include
#include
#include
long long l, r;
int main(){
scanf ("%lld%lld", &l, &r);
for (long long i = r; i >= l; i--){
if (i % 2 == 0){
printf ("%lld\n", i / 2);
return 0;
}
}
return 0;
}
尝试使用C++
#include
using namespace std;
int main()
{
long long a, b;
cin >> a >> b;
cout << b / 2;
system("pause");
return 0;
}
\kern{75pt}

萌萌琪露诺在寺子屋的教室里面见到了哆来咪·苏伊特。心怀好意的哆来咪告诉了她期末考试的题目,只要解出这些题目就能免于被慧音老师头槌。兴奋的琪露诺告别了哆来咪,猛然发现自己已经身处在期末考试的考场之上!但是琪露诺实在是太笨了,醒来就把哆来咪告诉她的题目忘得一干二净,只记得试卷上有大量的⑨。
现在琪露诺已经在考试啦,你可以使用⑨的妖精链接回答她的问题,以平复她忘记了考试答案的悲痛。你能帮帮她吗?
温馨提示:考试作弊是不对的哦。
琪露诺定义一个十进制正整数为「 k k k 阶天才数」,当且仅当该整数的位数为 k k k 的倍数,且每一个数位均为 9 9 9。例如, 9999 9999 9999 是 2 2 2 阶天才数,而 999 999 999 不是 2 2 2 阶天才数,但是它是 1 1 1 阶天才数,也是 3 3 3 阶天才数。
琪露诺给定你 t t t 个询问,每个询问有两个整数 n n n 和 k k k,希望你能帮帮她,告诉她能不能把 n n n 拆分成若干个 k k k 阶天才数的和。
aya,否则输出一行一个字符串 baka。2
1 999
2 999
aya
baka
本题共有 20 20 20 个测试点,每个测试点 5 5 5 分。最终分数为所有测试点分数之和。
KaTeX parse error: Expected a control sequence at position 6: \def{̲\n}{\text{无特殊限制…
对于全部数据,满足 1 ≤ t ≤ 1 0 3 1\le t\le 10^3 1≤t≤103, 1 ≤ n i ≤ 1 0 18 1\le n_i\le 10^{18} 1≤ni≤1018, 1 ≤ k i ≤ 10 1\le k_i\le 10 1≤ki≤10。
C语言
#include
#include
#include
#include
int main(){
long long t,n,k;
scanf("%lld",&t);
while(t--){
scanf("%lld %lld",&k,&n);
long long x = 0;
for(long long i = 1;i <= k;i++){
x = x*10 + 9;
}
if(n % x != 0) puts("baka");
else puts("aya");
}
return 0;
}
尝试使用C++
#include
using namespace std;
int main()
{
long long t, n, k;
cin >> t;
while (t--)
{
cin >> k >> n;
long long num = 0;
for (long long i = 1; i <= k; i++)
{
num = num * 10 + 9;
}
if (n % num != 0)
cout << "baka"<<endl;
else
cout << "aya"<<endl;
}
system("pause");
return 0;
}
一天,Mirko 发现了一个非常大的屏幕,这个屏幕上一开始只有一个字母 A \texttt{A} A。Mirko 在这个屏幕旁边找到了一个按钮。当他按一次时,屏幕上的字母变成了 B \texttt B B。随后他又按了若干次,屏幕上依次显示 BA \texttt{BA} BA、 BAB \texttt{BAB} BAB、 BABBA \texttt{BABBA} BABBA、……这时他才发现,每当他按一次按钮,屏幕上的字母 B \texttt B B 变为 BA \texttt{BA} BA,而字母 A \texttt A A 变为 B \texttt{B} B。
现在,Mirko 已经按了 k k k 次按钮,他想知道屏幕上分别有多少个字母 A \texttt A A 和字母 B \texttt B B。
输入一个整数 k k k,表示 Mirko 按下按钮的次数。
输出两个整数,以空格间隔,分别表示字母 A \texttt A A 的个数和字母 B \texttt B B 的个数。
1
0 1
4
2 3
10
34 55
【数据范围与限制】
对于
20
%
20\%
20% 的数据,保证
k
⩽
10
k\leqslant 10
k⩽10。
对于所有数据,
1
⩽
k
⩽
45
1\leqslant k\leqslant 45
1⩽k⩽45。
【题目来源】
本题来源自 COCI 2013-2014 CONTEST 3 T1 RIJEČI,按照原题数据配置,满分 50 50 50 分。
由 Eason_AC 翻译整理提供。
C语言
#include
#include
#include
#include
int main()
{
int k, a[50];
scanf("%d",&k);
a[0] = 0;
a[1] = 1;
a[2] = 1;
for (int i = 3;i <= k;i++)
a[i] = a[i - 1] + a[i - 2];
printf("%d %d",a[k-1],a[k]);
}
尝试使用C++
#include
using namespace std;
int main()
{
int k, a[50];
cin >> k;
a[0] = 0;
a[1] = 1;
a[2] = 1;
for (int i = 3; i <= k; i++)
a[i] = a[i - 1] + a[i - 2];
cout << a[k - 1] << " " << a[k];
return 0;
}
经过管理员的考虑,我们打算将民间数据单独存放在最后一个 Subtask 中。这些测试点分数均为 0 分,但是没有通过其中的任何测试点将会视为此题不通过。
民间数据提供者:@一扶苏一。
智慧之王 Kri 统治着一座王国。
这天 Kri 决定举行一场比赛,来检验自己大臣的智慧。
比赛由 n n n 道判断题组成,有 m m m 位大臣参加。现在你已经知道了所有大臣的答题情况,但尚未拿到答案,于是你决定先行预测。
具体来说,对于第 i i i 道题,有 x x x 个大臣选对, y y y 个大臣选错(显然有 x + y = m x+y=m x+y=m),如果 x > y x>y x>y,那么你预测这题答案为对,否则为错。为了方便,我们保证 m m m 是奇数。
在统计完成后,你拿到了答案,你想知道通过你的预测方式你最后有几道题预测正确。
第一行两个正整数 n , m n,m n,m,保证 m m m 是奇数。
接下来 m m m 行,每行 n n n 个整数,第 i i i 行第 j j j 个整数代表第 i i i 位大臣对第 j j j 道题的答案, 1 1 1 表示他选对, 0 0 0 表示他选错。
接下来 1 1 1 行 n n n 个整数, 表示比赛答案,第 i i i 个数 b i b_i bi 若为 1 1 1 表示第 i i i 道题答案是对,若为 0 0 0 表示答案是错。
输出一个整数,表示你最后有几题预测正确。
3 3
1 0 1
0 1 1
0 1 0
1 1 1
2
6 5
1 0 1 1 1 0
0 1 0 1 1 1
0 0 1 0 1 0
1 0 1 0 1 0
0 1 0 1 0 0
1 0 1 0 1 0
4
见附件中的 kingdom3.in
见附件中的 kingdom3.out
【样例 1 解释】
所以预测正确的题数为 2 2 2。
【数据范围】
对于 20 % 20\% 20% 的数据, n ≤ 5 n\le 5 n≤5, m = 1 m=1 m=1。
对于 50 % 50\% 50% 的数据, n ≤ 10 n\le 10 n≤10, m ≤ 10 m\le 10 m≤10。
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1000 1 \le n\le 1000 1≤n≤1000, 1 ≤ m ≤ 1000 1 \le m\le 1000 1≤m≤1000, m m m 为奇数。
C语言
#include
#include
#include
#include
int read(){
int x = 0; char ch = getchar();
while(ch < '0' || ch > '9') ch = getchar();
while(ch >= '0' && ch <= '9'){
x = (x << 1) + (x << 3) + ch - '0';
ch = getchar();
}
return x;
}
int n, m, cnt[1000001], ans;
int main(){
n = read(), m = read();
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
cnt[j] += read();
}
}
for(int i = 1; i <= n; i++){
ans += read()?(cnt[i]<<1>m):(cnt[i]<<1<m);
}
printf("%d\n", ans);
return 0;
}
C++
#include
using namespace std;
int read() {
int x = 0; char ch = getchar();
while (ch < '0' || ch > '9') ch = getchar();
while (ch >= '0' && ch <= '9') {
x = (x << 1) + (x << 3) + ch - '0';
ch = getchar();
}
return x;
}
int n, m, cnt[1000001], ans;
int main() {
n = read(), m = read();
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cnt[j] += read();
}
}
for (int i = 1; i <= n; i++) {
ans += read() ? (cnt[i] << 1 > m) : (cnt[i] << 1 < m);
}
printf("%d\n", ans);
return 0;
}
本题分值按 COCI 原题设置,满分 50 50 50。
全国连锁超市(NSC)喜欢吹嘘它们的意式肉肠是全国最低的。
实际上,如果顾客打算在其他连锁超市里找到更便宜的肉肠,那么 NSC 会向其补上差价。
Matej 和 Filip 决定接受这个挑战。他们将会挨个走访 N N N 家不同连锁店,来找到不仅比 NSC 便宜的熟香肠,而且在市场上最便宜的。如果他们成功了,他们就可以在他们学校附近的 NSC 分店买到最便宜的香肠。
NSC 希望没有人能找到更便宜的香肠,因为所有所有连锁超市(包括 NSC)都以一种复杂的方式表示香肠的价格: X X X 元 Y Y Y 克香肠。
请编写一个程序,给定 NSC 与其余 N N N 家连锁店中的香肠价格,求 Matej 和 Filip 必须为靠近学校的 NSC 中的 1000 1000 1000 克熟香肠支付的价格。
第一行两个正整数 X NSC ( 1 ≤ X NSC ≤ 100 ) X_{\textrm{NSC}}\ (1\le X_{\textrm{NSC}} \le 100) XNSC (1≤XNSC≤100) 和 Y NSC ( 1 ≤ Y NSC ≤ 1 0 3 ) Y_{\textrm{NSC}}\ (1\le Y_{\textrm{NSC}} \le 10^3) YNSC (1≤YNSC≤103),表示 X NSC X_{\textrm{NSC}} XNSC 是在 NSC 连锁店中 Y NSC Y_{\textrm{NSC}} YNSC 克香肠的价格。
第二行一个正整数 N ( 1 ≤ N ≤ 100 ) N\ (1\le N\le 100) N (1≤N≤100),表示连锁店的数目(不包括 NSC)。
接下来 N N N 行,每行两个正整数 X i , Y i ( X i ≤ 100 , Y i ≤ 1 0 3 ) X_i,Y_i\ (X_i\le 100, Y_i\le 10^3) Xi,Yi (Xi≤100,Yi≤103),表示 X i X_i Xi 是在第 i i i 家连锁店中 Y i Y_i Yi 克香肠的价格。
输出仅一行,一个实数,表示结果,保留 2 2 2 位小数。
5 100
3
4 100
3 100
7 100
30.00
13 6
5
56 679
35 120
99 999
56 73
37 532
69.55
100 5
3
99 8
65 14
78 10
4642.86
C语言
#include
#include
#include
#include
int main()
{
double n, m;
scanf("%lf%lf",&n,&m);
int t;
scanf("%d",&t);
double sum = 1000/m*n;
while(t--)
{
double a,b;
scanf("%lf%lf",&a,&b);
double num = 1000 / b*a;
if(num <= sum)
{
sum = num;
}
}
printf("%.2lf",sum);
return 0;
}
C++
#include
#include
using namespace std;
int main()
{
double n, m;
cin >> n >> m;
int t;
cin >> t;
double sum = 1000 / m * n;
while (t--)
{
double a, b;
cin >> a >> b;
double num = 1000 / b * a;
if (num <= sum)
{
sum = num;
}
}
cout << fixed << setprecision(2) << sum<< endl;
return 0;
}