Day1
[蓝桥杯 2021 省 B2] 特殊年份
签到题目。按照题目要求来就行
#include<bits/stdc++.h>
using namespace std;
const int N=5;
int main()
{
int ans=0;
for(int j=0;j<5;j++)
{
int t;
cin>>t;
int a[N];
for(int i=1;i<=4;i++)
{
a[i]=t%10;
t/=10;
}
if(a[2]==a[4]&&a[1]-1==a[3])
{
ans++;
}
}
cout<<ans<<endl;
}
[蓝桥杯 2021 省 AB2] 小平方
num要用double
#include<bits/stdc++.h>
using namespace std;
const int N=5;
typedef long long ll;
int main()
{
ll n;
cin>>n;
double num;
num=n;
num/=2;
int ans=0;
for(int i=1;i<n;i++)
{
int yu;
yu=i*i%n;
// cout<<yu<<" ";
if(yu<num)
{
ans++;
}
}
cout<<ans<<endl;
}
[蓝桥杯 2021 省 AB2] 完全平方数
t了三个数据,得了70分
如果为偶数的话就最小质因数
如果为奇数的话就乘以一个最小的质因数
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL n;
cin >> n;
LL ans = 1;
for (int i=2;i*i<= n;i++)
if(n% i==0)
{
int k=0;
while(n%i==0)
{
n/=i;
k++;
}
if(k&1==1) ans*= i;//盘点k是否为奇数
}
if(n>1) ans*=n;
cout << ans<<endl;
return 0;
}
[蓝桥杯 2021 省 AB] 砝码称重
t了五个数据,得了50分
用dfs纯纯暴力枚举所有情况
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n;
int a[N];
bool flag[N];
int ans;
void dfs(int idx,int left,int right)
{
if(idx == n)
{
int p = abs(left - right);
if(!flag[p]) ans++;
flag[p] = true;//找到一个数,标记
return;
}
dfs(idx + 1,left,right);
dfs(idx + 1,left + a[idx],right);//左边放
dfs(idx + 1,left,right + a[idx]);//右边放
}
int main()
{
flag[0] = true;//两边不放砝码or左右两边重量相同
cin >> n;
for(int i = 0 ; i < n ; i++) cin >> a[i];
dfs(0,0,0);
cout << ans;
return 0;
}#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n;
int a[N];
bool flag[N];
int ans;
void dfs(int idx,int left,int right)
{
if(idx == n)
{
int p = abs(left - right);
if(!flag[p]) ans++;
flag[p] = true;//找到一个数,标记
return;
}
dfs(idx + 1,left,right);
dfs(idx + 1,left + a[idx],right);//左边放
dfs(idx + 1,left,right + a[idx]);//右边放
}
int main()
{
flag[0] = true;//两边不放砝码or左右两边重量相同
cin >> n;
for(int i = 0 ; i < n ; i++) cin >> a[i];
dfs(0,0,0);
cout << ans;
return 0;
}
[蓝桥杯 2021 省 B] 时间显示
#include<bits/stdc++.h>
using namespace std;
const int D=24;
const int H=60;
const int M=60;
const int S=1000;
typedef long long ll;
int main()
{
ll ms;
cin>>ms;
//将ms化成s
ll s=ms/S;
s%=D*H*M;//防止过了很多天
long long int h=s/3600;
//将s转化成h
int m=s/H%H;
s=s%H;
if(h<10) cout<<0<<h;
else cout<<h;
cout<<":";
if(m<10) cout<<0<<m;
else cout<<m;
cout<<":";
if(s<10) cout<<0<<s;
else cout<<s;
}
Day3
SMU Winter 2023 Round #11 (Div.2)
A - BCD
n可以用多少个盒子装,签到题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int n,k;
cin>>n>>k;
if(n%k) cout<<n/k+1<<endl;
else cout<<n/k<<endl;
return 0;
}
B - Poku's Vacation
分情况讨论,每级台阶比前一级严格大,所以至少公差为1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
if(n==1){
cout<<1<<endl;
continue;
}else{
for(int i=2;;i++){
if((i*(i+1))/2==n){//等差数列求和,算出建到第i级台阶需要多少的砖头
cout<<i<<endl;
break;
}
else if((i*(i+1))/2>n){
cout<<i-1<<endl;
break;
}
}
}
}
return 0;
}
C-Dualites in Pain - The Beginning
易知,当讲座数目最大的那门课程的讲座数目与第二大的课程讲座数目之差大于2,那么一定会在最后连续
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
int a[N];
int main()
{
/*
int t;
cin>>t;
while(t--){
*/
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
if(a[n-1]-a[n-2]>=2){
cout<<"NO"<<endl;
}
else{
cout<<"YES"<<endl;
}
// }
return 0;
}
D-Elder Ning
求区间的交集中有几个数
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int r,l;
int main()
{
/*
int t;
cin>>t;
while(t--){
*/
int n,m;
cin>>n>>m;
int lmax=0,rmin=1e5+1;
for(int i=1;i<=m;i++)
{
cin>>l>>r;
lmax=max(lmax,l);//找到最大的左区间
rmin=min(rmin,r);//找到最小的右区间
}
if(lmax>rmin)//空集
{
cout<<0<<endl;
}
else{//非空,算个数
cout<<rmin-lmax+1<<endl;
}
// }
return 0;
}
E - Hostel Cleaning
暴力t掉。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int a[N];
bool f[N];
int main()
{
/*
int t;
cin>>t;
while(t--){
*/
ll n,k;
cin>>n>>k;
for(ll i=1;i<=n;i++) cin>>a[i];
ll smin=N;
for(ll i=1;i<=n;i++){
ll sum=a[i];
for(ll y=1;y<i;y++) f[y]=true;//将i前面的都标记
for(ll j=i+k;;j+=k){
if(j>n){
if(f[j-n]==false){//超过初始位置
smin=min(smin,sum);
bool f[N];//恢复原装
break;//结束
}
else sum+=a[j-n];//没超过初始位置,还没扫完房间。
}
else sum+=a[j];
}
}
cout<<smin<<endl;
// }
return 0;
}
F-No Internet IPC!
剪枝+分类讨论
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
int a[N];
int main()
{
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
if(k==1){//当数据线只有一条时
cout<<n-1<<endl;
continue;
}
if(n==1){//当需要更新的电脑只有一台时
cout<<0<<endl;
continue;
}
if(n==2){//当需要更新的电脑有两台时
cout<<1<<endl;
continue;
}
int now=2,ti=1;
while(1){
if(now>=k){//已经完成更新的电脑台数大于数据线条数。k台能连接
now+=k;
ti++; //时间增加一小时
}else{//否则,每台都连接数据线
now*=2;
ti++;
}
if(now>=n){//所有电脑均完成更新
cout<<ti<<endl;
break;
}
}
}
return 0;
}
Day5
A - KK 画猪
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int a[N];
bool f[N];
int main()
{
string s;
cin>>s;
printf(" (\\____/)\n");
printf(" / @__@ \\\n");
printf(" ( (oo) )\n");
printf(" `-.~~.-'\n");
printf(" / \\\n");
printf(" @/ \\_\n");
printf("(/ / \\ \\)\n");
printf(" WW`----'WW\n");
return 0;
}
B - KK 学几何
#include<bits/stdc++.h>
using namespace std;
//const int N=2e5+10;
const double pi=3;
typedef long long ll;
//int a[N];
//bool f[N];
int main()
{
ll n;
cin>>n;
double sum=0;
while(n--)
{
int t;
cin>>t;
if(t==1)
{
double r;
cin>>r;
sum+=pi*r*r;
}
if(t==2)
{
double l,h;
cin>>l>>h;
sum=sum+(l*h)/2.0;
}
if(t==3)
{
double L,W;
cin>>L>>W;
sum=sum+L*W;
}
}
printf("%.1lf",sum);
return 0;
}
C - KK 算日期
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
//const double pi=3;
typedef long long ll;
//map<string,int>bm;
int a[N];
//vector<int>a;
//bool f[N];
int main()
{
ll n;
cin>>n;
while(n--)
{
int y,year,flag,n;
cin>>y>>n;
//不存在,公元元年的次年是公元2年
if(y+n<=0)
{
year=abs(y+n)+1;
}
else{
year=y+n;
}
if( (year%4== 0) && ( (year%100)!=0 ) || year%400==0 ){ //能被4整除,但不能被100整除。或者能被400整除,flag=1
flag=1;
} else{ //不是闰年,flag=0
flag=0;
}
if(flag==1){
printf("29\n");
}else{
printf("28\n");
}
}
return 0;
}
G. KK 看跳舞
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
//const double pi=3;
typedef long long ll;
//map<string,int>bm;
int a[N];
//bool f[N];
int main()
{
int _;
cin>>_;
while(_--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
if(n==1||n==2||n==3)
{
cout<<"YES"<<endl;
}
else
{
int f=0;
for(int i=0;i<n;i++)
{
if(i==0)
{
if(abs(a[0]-a[1])!=1&&abs(a[0]-a[n-1])!=1)
{
cout<<"NO"<<endl;
f=1;
break;
}
continue;
}
if(i==n-1)
{
if(abs(a[n-1]-a[n-2])!=1&&abs(a[n-1]-a[0])!=1)
{
cout<<"NO"<<endl;
f=1;
break;
}
continue;
}
if(abs(a[i]-a[i-1]!=1&&a[i]-a[i+1])!=1)
{
cout<<"NO"<<endl;
f=1;
break;
}
}
if(f!=1)
{
cout<<"YES"<<endl;
}
}
}
return 0;
}
H. KK 与十佳
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
//const double pi=3;
typedef long long ll;
//map<string,int>bm;
//int a[N];
vector<int>a;
//bool f[N];
int findRemoveIndex(vector<int>nums) {
int negativeCount = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < 0) {
negativeCount++;
}
}
int tempIndex = 0;
if ((negativeCount & 1) == 1) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < 0) {
if (nums[tempIndex] >= 0 || nums[i] > nums[tempIndex]) {
tempIndex = i;
}
}
}
return tempIndex;
} else {
if (nums.size() == negativeCount) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < nums[tempIndex]) {
tempIndex = i;
}
}
return tempIndex;
};
for (int i = 0; i < nums.size(); i++) {
if (nums[i] >= 0) {
if (nums[tempIndex] < 0 || nums[i] < nums[tempIndex]) {
tempIndex = i;
}
}
}
return tempIndex;
}
}
int main()
{
/*
int _;
cin>>_;
while(_--)
{
*/
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
a.push_back(x);
}
cout<<a[findRemoveIndex(a)]<<endl;
// }
return 0;
}
I. KK 买股票
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
//const double pi=3;
typedef long long ll;
//map<string,int>bm;
int arr[N];
//bool f[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int min = arr[0];
int maxGrep = arr[1] - arr[0];
for (int i = 1; i < n; i++) {
if( arr[i] < min ) min = arr[i];
if(arr[i] - min > maxGrep){
maxGrep = arr[i] - min;
}
}
cout<<maxGrep<<endl;
return 0;
}
J. KK与英语
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
//const double pi=3;
typedef long long ll;
//map<string,int>bm;
int a[N];
//vector<int>a;
//bool f[N];
int main()
{
string str;
getline(cin,str);
// cout<<str<<endl;
cout<<str[0];
for (int i = 1; i < str.size(); i++) {
if (str[i] == 'i' && str[i + 1] == 's' && str[i - 1] == ' ' && str[i + 2] == ' ') {
cout << "was";
i++;
continue;
}
cout << str[i];
}
/* cout<<s<<endl;
reverse(s.begin(),s.end());
int ans=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!='-')
{
break;
}
ans++;
}
reverse(s.begin(),s.end());
*/
return 0;
}
Day6
[蓝桥杯 2019 省 B] 特别数的和
#include <bits/stdc++.h>
using namespace std;
bool Is(int x){
int t;
while(x){
t=x%10;
if (t== 2||t==0||t==9||t==1) return true;
else x/=10;
}
return false;
}
int main(){
int n;
cin>>n;
int sum=0;
for(int i= 1;i<=n;++ i){
if(Is(i))
sum +=i;
}
cout<<sum<<endl;
return 0 ;
}
[蓝桥杯 2019 省 AB] 完全二叉树的权值
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int maxd=0;//记最大的那层深度为maxd
long long max=-100005;//记最大深度
//每层第一个数i是2的n次方
//每层最后一个数为下一层的前一个数。
int d=1;
for(int i=1;i<=n;i*=2,d++)
{
long long sum=0;
for(int j=i;j<=2*i-1&&j<=n;j++)
{
sum+=a[j];
}
if(sum>max) //找到最大的那层
{
max=sum;
maxd=d;
}
}
cout<<maxd<<endl;
}
[蓝桥杯 2021 国 ABC] 123
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[5];
ll Find(ll n){//二分
ll l=1,r=10000000;
while(l<r){
ll mid=(l+r)/2;//mid代表行
//求第mid行及以前的数的个数
if((1+mid)*mid/2>=n) r=mid;
else l=mid+1;
}
return r;
}
ll f(ll n){//第n行的和
return (1+n)*n/2;
}
ll Ans(ll n){//前 n 行的和
return n*(n+1)*(n+2)/6;
}
int main(){
int t;
cin>>t;
while(t--){
ll l,r;
cin>>l>>r;
a[1]=l-f(Find(l)-1);//前 l 行
a[2]=r-f(Find(r)-1);//前 r 行
ll ans1=Ans(Find(l)-1)+a[1]*(a[1]-1)/2;//前 l 个数的和
ll ans2=Ans(Find(r)-1)+(a[2]+1)*a[2]/2;//前 r 个数的和
cout<<ans2-ans1<<"\n";
}
return 0;
}
[蓝桥杯 2019 省 B] 等差数列
#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
int a[N];
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i ++){
scanf("%d", &a[i]);
}
sort(a, a + n);
//求后面各项与第一项所有差值的最大公约数
int d = 0;
for(int i = 1; i<n;i++) d=__gcd(d,a[i]-a[0]);
if(!d) printf("%d\n", n);
else printf("%d\n", (a[n-1]-a[0])/d+1);
return 0;
}
[蓝桥杯 2019 省 A] 修改数组
#include<bits/stdc++.h>
using namespace std;
const int M=1e4+10;
const int N=1e6+10;
int fa[N];
int n,a;
int Find(int x){
if(fa[x]==x) return fa[x];
return fa[x]=Find(fa[x]);
}
int main(){
cin>>n;
for(int i=1;i<N;++i) fa[i]=i;
for(int i=1;i<=n;++i){
cin>>a;
a=Find(a);
cout<<a<<" ";
fa[a]=a+1;
}
}
[蓝桥杯 2019 省 A] 外卖店优先级
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
struct node
{
int ts,num;
}a[N];
bool cmp(node s1,node s2)
{
if(s1.ts==s2.ts)return s1.num<s2.num;
return s1.ts<s2.ts;
}
int n,m,t,ans;
int last[N],sum[N];//第几号店的上一次时间,记录当前第几号店的值
bool st[N];//是否在优先缓存队列中
int main()
{
int tt=0;//记录上一个时间
scanf("%d%d%d",&n,&m,&t);
for(int i=1;i<=m;i++)scanf("%d%d",&a[i].ts,&a[i].num);
sort(a+1,a+1+m,cmp);
for(int i=1;i<=m;i++)
{
int tt,id;
tt=a[i].ts;id=a[i].num;
if(tt!=last[id])sum[id]-=tt-last[id]-1;
if(sum[id]<0)sum[id]=0;
if(sum[id]<=3)st[id]=0;
sum[id]+=2;
if(sum[id]>5)st[id]=1;
last[id]=tt;
}
for(int i=1;i<=n;i++)
{
if(last[i]<t)sum[i]-=t-last[i];
if(sum[i]<=3)st[i]=0;
}
for(int i=1;i<=n;i++)
{
if(st[i])ans++;
}
cout<<ans<<endl;
return 0;
}
标签:const,int,ll,cin,long,寒假,2023,using,week4
From: https://www.cnblogs.com/Qinna-blogs/p/17097065.html