3.11-3.17 周记
Posted 1625--h
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.11-3.17 周记相关的知识,希望对你有一定的参考价值。
3.11-3.17
这周比较水,周一满课,看了看单调队列优化dp,晚上准备英语演讲,做了些天梯赛的题目,周二几乎整天都在准备英语演讲。随手过了几个L1的题目。星期三结束了英语演讲之后,晚上怒刷L1。星期四将L1完结,开刷L2。周五看了看python,数据库,晚上继续L2。周六参加了西北大学校赛,跟sx大佬a了五个题,拿了全场第一个一血,太刺激了。最后过了五个题也还算完美。今天匆匆忙忙补完了作业,不敢拖拉,赶紧补上本周的总结
1. 天梯赛练习集-L1部分
L1-006?连续因子
#include <bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
int max_len = sqrt(n);
int res_begin = 0,res_len = 0;
for(int i=2;i<=max_len;i++){
if(n%i==0){
int k = n,cnt = 0,now = i;
while(k%now==0){
k/=now;
cnt++;
now++;
}
if(cnt>res_len){
res_len = cnt;
res_begin = i;
}
}
}
if(res_len == 0){
cout<<1<<endl<<n<<endl;
return 0;
}
printf("%d
%d",res_len,res_begin);
for(int i=1;i<res_len;i++)
printf("*%d",res_begin+i);
puts("");
return 0;
}
L1-020?帅到没朋友
这个题比较坑,输出的id必须是5位,而且需要有前缀0
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,p[100000]={0};
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
for(int j=0;j<x;j++)
{
int y;
cin>>y;
if(x!=1)
p[y]=1;
}
}
int m,sum=0,flag=1;
cin>>m;
for(int i=0;i<m;i++)
{
int o;
cin>>o;
if(p[o]==0)
{
p[o]=1;
sum++;
if(flag==1)
{
printf("%05d",o);
flag=0;
}
else
{
printf(" %05d",o);
}
}
}
if(sum==0)
{
cout<<"No one is handsome";
}
cout<<endl;
return 0;
}
L1-023?输出GPLT
这个题也卡了一点时间,主要问题就是最后循环不到位,输出的不完全
#include <bits/stdc++.h>
using namespace std;
char s[10010];
int G,P,L,T;
int a[4];
char t[4] = {'G','P','L','T'};
int main(){
cin>>s;
int len = strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='G'||s[i]=='g')G++;
else if(s[i]=='P'||s[i]=='p')P++;
else if(s[i]=='L'||s[i]=='l')L++;
else if(s[i]=='T'||s[i]=='t')T++;
}
a[0] = G,a[1] = P,a[2] = L,a[3] = T;
int sum = G+P+L+T;
//循环条件Len+4
for(int i=0;i<len+4;i++){
if(a[i%4]){
printf("%c",t[i%4]);
a[i%4]--;
sum--;
if(sum==0)break;
}
}
puts("");
return 0;
}
L1-025?正整数A+B
- 这个题理解错题意了,输入在一行给出A和B,中间是空格隔开,输入样例里面有一个多数字的,其实第一个空格之后的都属于B,简直坑惨了
#include <bits/stdc++.h>
using namespace std;
string A,B;
int a;int b;
int convert(string s){
int res = 0;
int len = s.length();
if(len<1||len>4)return false;
for(int i=0;i<len;i++)
res = res*10+s[i]-'0';
return res;
}
bool check(string s){
int len = s.length();
if(len<1||len>4)return false;
for(int i=0;i<len;i++)
if(!isdigit(s[i]))return false;
int num = convert(s);
if(num>1000||num<1)return false;
return true;
}
char str1[1100],str2[1100];
int main(){
char str1[1100], str2[1100];
scanf("%s",str1);
getchar();
cin.getline(str2,sizeof str2);
A = string(str1);
B = string(str2);
//cout<<A<<endl<<B<<endl;
int f1=0,f2 = 0;
if(check(A)){
f1 = 1;
a = convert(A);
}
if(check(B)){
f2 = 1;
b = convert(B);
}
if(f1)printf("%d",a);
else printf("?");
printf(" + ");
if(f2)printf("%d",b);
else printf("?");
printf(" = ");
if(f1&&f2)printf("%d",a+b);
else printf("?");
puts("");
return 0;
}
L1-046?整除光棍
import java.util.Scanner;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String str = cin.next();
BigInteger a = new BigInteger(str);
BigInteger b = new BigInteger("1");
BigInteger end = new BigInteger("0");
int num = 1;
while(true) {
if(end.equals(b.remainder(a))) {
break;
}
b = b.multiply(new BigInteger("10")).add(new BigInteger("1"));
num++;
}
System.out.println(b.divide(a)+" "+num);
}
}
- 竖式除法自己没想出来
#include<iostream>
using namespace std;
int main()
{
int x,s=0,n=0;//定义除数,被除数,位数
cin>>x;
while(s<x)
{
s=s*10+1;//被除数末位添1直到不小于被除数
n++;//位数增1
}
while(true)//开始进行除法运算
{
cout<<s/x;//输出商
s%=x;//被除数更新为余数
if(s==0)break;//余数为0则结束
s=s*10+1;//余数末位添1
n++;//位数增1
}
cout<<' '<<n;
return 0;
}
L1-049?天梯赛座位分配
- 这题逼我用bfs做,实在是无法正视
#include <bits/stdc++.h>
using namespace std;
int n,a[101];
int res[101][101];
struct node{
int x,y;
};
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
queue<node> q;
for(int i=1;i<=n;i++)q.push({i,1});
int cnt = 0;
while(!q.empty()){
int x = q.front().x;
int y = q.front().y;
q.pop();
res[x][y] = ++cnt;
if(y<a[x]*10)q.push({x,y+1});
}
for(int i=1;i<=n;i++){
printf("#%d
",i);
int jud = 1;
for(int j=1;j<=a[i]*10;j++){
int now = res[i][j];
if(j!=1&&res[i][j]==res[i][j-1]+1){
now = res[i][j]+jud;
jud++;
}
if(j%10==1)printf("%d",now);
else printf(" %d",now);
if(j%10==0)puts("");
}
}
return 0;
}
2.天梯赛练习集-L2部分
这部分放到下一周叭,就这么愉快的说定了。我要去补题了。
以上是关于3.11-3.17 周记的主要内容,如果未能解决你的问题,请参考以下文章