Codeforces Beta Round #107(Div2)
B.Phone Numbers
思路:就是简单的结构体排序,只是这里有一个技巧,就是结构体存储的时候,直接存各种类型的电话的数量是多少就行,在读入电话的时候,既然号码是一定的,那么就直接按照格式%c读取就好,在比较的时候也容易比较,直接比较ASCII码就行
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
struct people{
int num;
char s[100];
int t=0,p=0,c=0;
}a[1500];
bool cmpt(people a,people b){
if(a.t==b.t){
return a.num<b.num;
}
return a.t>b.t;
}
bool cmpp(people a,people b){
if(a.p==b.p){
return a.num<b.num;
}
return a.p>b.p;
}
bool cmpc(people a,people b){
if(a.c==b.c){
return a.num<b.num;
}
return a.c>b.c;
}
int main(){
int t;
scanf("%d",&t);
for(int i=0;i<t;i++){
a[i].num=i;
int n;
scanf("%d %s",&n,&a[i].s);
int t=0;
int p=0;
int cc=0; for(int j=0;j<n;j++){
char b,c,d,e,f,g;
char s;
getchar();
scanf("%c%c",&b,&c);
scanf("%c",&s);
scanf("%c%c",&d,&e);
scanf("%c",&s);
scanf("%c%c",&f,&g);
if(b==c&&c==d&&d==e&&e==f&&f==g){
t++;
}else if(b>c&&c>d&&d>e&&e>f&&f>g){
p++;
}else{
cc++;
}
}
a[i].p=p;
a[i].t=t;
a[i].c=cc;
}
/*for(int i=0;i<t;i++){
printf("%d %d %d\n",a[i].t,a[i].p,a[i].c);
}*/
int tt=0;
int p=0;
int c=0;
int sump=0,sumt=0,sumc=0;
sort(a,a+t,cmpt);
tt=a[0].t;
for(int i=0;i<t;i++){
if(a[i].t==tt){
sumt++;
}
}
printf("If you want to call a taxi, you should call: ");
for(int i=0;i<sumt;i++){
printf("%s",a[i].s);
if(i<sumt-1){
printf(", ");
}
}
printf(".\n");
sort(a,a+t,cmpp);
p=a[0].p;
for(int i=0;i<t;i++){
if(a[i].p==p){
sump++;
}
}
printf("If you want to order a pizza, you should call: ");
for(int i=0;i<sump;i++){
printf("%s",a[i].s);
if(i<sump-1){
printf(", ");
}
}
printf(".\n");
sort(a,a+t,cmpc);
c=a[0].c;
for(int i=0;i<t;i++){
if(a[i].c==c){
sumc++;
}
}
printf("If you want to go to a cafe with a wonderful girl, you should call: ");
for(int i=0;i<sumc;i++){
printf("%s",a[i].s);
if(i<sumc-1){
printf(", ");
}
}
printf(".");
}
C.Win or Freeze
思路:其实最多两局,如果给定的这个数质因子大于2或者是质数,那么就是1赢,1直接选定两个质因子的乘积就能确保自己赢,剩下的情况就是2赢
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
vector <pair<__int64, __int64> > divide(__int64 x) {
vector <pair<__int64, __int64> > v;
for (int i = 2; i <= x / i; ++i)
if (x % i == 0) {
int s = 0;
while (x % i == 0) x /= i, s++;
v.emplace_back(i, s);
}
if (x > 1) v.emplace_back(x, 1);
return v;
} /*vector<__int64> get_divisors(__int64 x) {
vector<__int64> res;
for (__int64 i = 1; i <= x / i; ++i)
if (x % i == 0) {
res.push_back(i);
if (i != x / i) res.push_back(x / i);
}
sort(res.begin(), res.end());
return res;
}*/
inline bool isprime(long long n) {
if (n < 2) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (long long i = 3; i <= n / i; i += 2)
if (n % i == 0) return false;
return true;
} int main(){
__int64 num;
int flag=0;
scanf("%I64d",&num);
if(num==1){
printf("1\n");
printf("0\n");
return 0;
}else if(isprime(num)==true){
printf("1\n");
printf("0\n");
return 0;
}
vector<pair<__int64,__int64>> v;
v=divide(num);
__int64 len=v.size();
__int64 sum=0;
__int64 sump=1;
int f=0;
for(__int64 i=0;i<len;i++){
__int64 se=v.back().second;
__int64 fi=v.back().first;
v.pop_back();
sum+=se;
if(f<2){
if(se>=2&&f==0){
f++;
f++;
sump*=fi;
sump*=fi;
}else if(se<2){
sump*=fi;
f++;
}else{
sump*=fi;
f++;
}
}
}
if(sum<=2){
printf("2\n");
}else{
printf("1\n");
printf("%I64d\n",sump);
}
}
D - Quantity of Strings
思路:主要分为k>n,k=n,k<n的情况,见代码,wa掉这么多主要是前两种考虑出了问题
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
const long long int modd=1e9+7;
int main(){
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
__int64 sum=0;
if(k<n){
if(k%2==0){
sum+=m;
/* if(k!=2){
sum+=((m-1)*m)%modd;
}*/
}else{
if(k==1){
__int64 num=1;
for(int i=0;i<n;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}else{
__int64 num=1; sum+=((m-1)*m)%modd; sum+=m;
}
}
}else if(k==n){
if(k%2==0){
__int64 num=1;
for(int i=0;i<n/2;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}else{
__int64 num=1;
for(int i=0;i<(n/2)+1;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}
}else{
__int64 num=1;
for(int i=0;i<n;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}
printf("%I64d\n",sum);
}
Codeforces Beta Round #107(Div2)的更多相关文章
- Codeforces Beta Round #73(Div2)
A - Chord 题意:就是环中有12个字符,给你三个字符,判断他们之间的间隔,如果第一个和第二个间隔是3并且第二个和第三个间隔是4,那么就输出minor,如果第一个和第二个间隔是4并且第二个和第三 ...
- Codeforces Beta Round #94 div2 D 优先队列
B. String time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
随机推荐
- 【LeetCode】4. Median of Two Sorted Arrays(思维)
[题意] 给两个有序数组,寻找两个数组组成后的中位数,要求时间复杂度为O(log(n+m)). [题解] 感觉这道题想法非常妙!! 假定原数组为a,b,数组长度为lena,lenb. 那么中位数一定是 ...
- Object类中的常用方法
1.getClass方法 源码: 功能: 返回此Object的运行时类. 什么是运行时类? 如上图所示,类从被加载到虚拟机内存开始,到卸载出内存为止,他的生命周期一共包含7个阶段.其中加载阶段虚拟机需 ...
- [源码解析] 并行分布式框架 Celery 之 worker 启动 (1)
[源码解析] 并行分布式框架 Celery 之 worker 启动 (1) 目录 [源码解析] 并行分布式框架 Celery 之 worker 启动 (1) 0x00 摘要 0x01 Celery的架 ...
- [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.3 Boost 变换器实例
2.3 Boost 变换器实例 图2.13(a)所示的Boost变换器器是另一个众所周知的开关模式变换器,其能够产生幅值大于直流输入电压的直流输出电压.图2.13(b)给出了使用MOSFET和二极管的 ...
- PYTHON工业互联网应用实战12—客户端操作
本章节我们将实现与admin里类似的列操作"下达"功能,演示客户端是如何实现操作功能,同时,演示也会强调一点,何时合并你的功能代码,避免相同功能使用不同的代码段来实现,在企业开发中 ...
- Linux 查看GPU状态
Linux 查看GPU状态 nvidia-smi nvidia-smi是NVIDIA自带的一个命令可以详细的展示显卡的运行状态. gpustat gpustat是github上开源的一个小工具,对于v ...
- Mysql无法通过临时密码访问
在Linux上安装Mysql: [步骤一]:将mysql的安装文件上传到Linux的服务器. [步骤二]:安装MYSQL服务端 [步骤三]:安装MYSQL客户端 我在步骤三遇到了问题,所以直接从步骤三 ...
- Vue Hello World
1 Vue介绍 伟大的项目是从Hello World而来的,Hello World尽管没有什么实际性的作用,但是在于意义重大.(哈哈哈哈) 好了不废话了入正题. Vue是一套用于构建用户界面的渐进式J ...
- vim与系统剪贴版的交互
1 概述 vim中的复制,删除,替换(d,r,s,x,y等)的内容都会被保存到默认的未命名的寄存器中,之后可以通过p进行粘贴,但是,这个寄存器不是系统的剪贴版,很多时候需要vim与系统剪贴版的交互,那 ...
- linux-shell 判断当前用户是否是root用户
环境变量UID中保存的是用户ID. root用户的UID是0. #! /bin/bash if [ $UID -ne 0 ]; then echo Non root user. Please run ...