比赛用快读快写模板,非bits/stdc++.h

本文深入探讨了C++中的模板使用,包括读取和输出模板的实现方式,以及多种数据结构如栈、队列、向量等的应用。通过具体代码示例,展示了算法在实际编程中的运用,如字符串处理、数学运算等。此外,还涉及了内存管理和命名空间的使用,为读者提供了全面的C++编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<cstdio>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<iomanip>
#include<deque>
#include<list>
#include<iterator>
#define mem(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
const ll maxn=1e5+10;
const ll mod=1e9+7;
const ll inf=0x7f7f7f7f;
template<typename T>void read(T &x)
{
    x = 0;char ch = getchar();ll f = 1;
    while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}
    while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T>void write(T x)
{
    if(x<0)
    {
        putchar('-');
        x=-x;
    }
    if(x>9)
    {
        write(x/10);
    }
    putchar(x%10+'0');
}
ll T;
bool flag;
int main()
{
    read(T);
    while(T--)
    {
    }
    return 0;
}


#include<bits/stdc++.h> #define LL long long #define il inline #define re register #define db double #define eps (1e-5) using namespace std; const int N=500000+10; il LL rd() { LL x=0,w=1;char ch=0; while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();} return x*w; } #define lc (o<<1) #define rc ((o<<1)|1) #define mid ((l+r)>>1) struct node { int wb[3],las; node(){wb[0]=wb[1]=wb[2]=las=0;} }s[N<<2],nw; il node ad(node a,node b) { node an; an.las=(a.las+b.las)%3; for(int i=0;i<3;i++) an.wb[i]=a.wb[i]+b.wb[(i-a.las+3)%3]; return an; } void bui(int o,int l,int r) { if(l==r) { if(rd()&1) s[o].wb[2-(l&1)]=1,s[o].las=2-(l&1); else s[o].wb[0]=1; return; } bui(lc,l,mid),bui(rc,mid+1,r); s[o]=ad(s[lc],s[rc]); } void modif(int o,int l,int r,int lx) { if(l==r) { if(s[o].las) s[o].wb[2-(l&1)]=s[o].las=0,s[o].wb[0]=1; else s[o].wb[2-(l&1)]=1,s[o].las=2-(l&1),s[o].wb[0]=0; return; } if(lx<=mid) modif(lc,l,mid,lx); else modif(rc,mid+1,r,lx); s[o]=ad(s[lc],s[rc]); } node quer(int o,int l,int r,int ll,int rr) { if(ll<=l&&r<=rr) return s[o]; node a,b; if(ll<=mid) a=quer(lc,l,mid,ll,rr); if(rr>mid) b=quer(rc,mid+1,r,ll,rr); return ad(a,b); } int n,m; LL ans; int main() { n=rd(),m=rd(); bui(1,1,n); while(m--) { int op=rd(); if(op&1) modif(1,1,n,rd()); else { ans=0; int l=rd(),r=rd(); nw=quer(1,1,n,l,r);++nw.wb[0]; ans=1ll*nw.wb[0]*(nw.wb[0]-1)/2+1ll*nw.wb[1]*(nw.wb[1]-1)/2+1ll*nw.wb[2]*(nw.wb[2]-1)/2; printf("%lld\n",ans); } } return 0; }详解每一行代码什么意思并代表什么含义
06-03
#include<bits/stdc++.h>//万能文件头 using namespace std; inline int read()//二进制优化的 { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f; } int n,m; bool b[100005];//定义b数组防止重复输出 vector<int > a[100005];//STL大法好 void dfs(int x,int r)//x表示所在点,r表示剩余未遍历的点 { b[x]=true;//记录某点已经输出过 if(!r)//如果每个点都遍历过终止递归 { cout<<x<<' '; return ; } cout<<x<<' ';//输出 for(int i=0;i<a[x].size();i++) if(!b[a[x][i]]) dfs(a[x][i],r-1);//查找从x可以到的点,并遍历 } void bfs() { queue<int> q;//还是STL q.push(1);b[1]=true;//把1点放入队列中,并标记1点已经遍历过 while(!q.empty()) { int s=q.front(); q.pop();//拿出队列首的那个点 cout<<s<<' ';//输出 for(int i=0;i<a[s].size();i++) if(b[a[s][i]]==false) q.push(a[s][i]),b[a[s][i]]=true;//把点s所能到达的点遍历,为防止TLE和重复输出,记录已遍历过的点 } } int main() { n=read();//入 m=read(); for(int i=1;i<=m;i++) { int x,y; x=read();//入 y=read(); a[x].push_back(y);//建图 表示x可以到y } for(int i=1;i<=n;i++)//把每条路所通向的点从小到大排列(题目中有要求) sort(a[i].begin(),a[i].end());//排 dfs(1,n);//进行深搜 从1点开始,进行n次 cout<<endl;//换行 for(int i=1;i<=n;i++) b[i]=false;//初始化 bfs();//进行广搜 return 0; }帮我把注释删掉并按照下面给的代码习惯重新修改一下#include<bits/stdc++.h> using namespace std; const int N=1010; struct Node{ int a,b; }e[N]; int n,k; double mid; bool cmp(Node &x,Node &y){ return x.a-mid*x.b>y.a-mid*y.b; } bool check(){ sort(e+1,e+n+1,cmp); double sum=0; for(int i=1;i<=n-k;i++) sum+=e[i].a-mid*e[i].b; return sum>=0; } int main(){ cin>>n>>k; for(int i=1;i<=n;i++)scanf("%d",&e[i].a); for(int i=1;i<=n;i++)scanf("%d",&e[i].a); double l=0,r=1; while(r-1>1e4-4){ mid+(l+r)/2; if(check())l=mid; else r=mid; } printf("%.0lf\n",r*100); }
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值