临时代码 库

· · 个人记录

方格取数::::

//思路分析 :

得到 两个 路径 算出最大值 :
#include<bits/stdc++.h>
using namespace std;
long long arr[1000][1000];
long long dp[1000][1000];
map<double,vector<int>>REC;
void fun(int n){
    memset(dp,0,sizeof(dp));
    for(int i=0;i<n;dp[i][0]=arr[i][0],dp[0][i]=arr[0][i]);
    for(int i=1;i<n;++i){
        for(int j=1;j<n;++j){
            dp[i][j]=max(dp[i-1][j],dp[i][j-1])+arr[i][j]''
            if()
        }
    }
}
int main()
{
    int n,x,y,val;
    cin>>n;
    //inittain.....
    while(cin>>y>>x>>val){
        if(!(x+y+val))break;
        arr[y][x]=val;
    }
    return 0;
}

虫十算

#if 0
#include<bits/stdc++.h>
using namespace std;
long long check(long long i, long long n) {  //首 项, 
    long long left = 1, right = 10000000000, mid;
    while (left <= right) {
        mid = (left + right) >> 1;
        if (mid*(i + mid + i - 1) / 2 > n)
            right = mid - 1;
        else if (mid*(i + mid + i - 1) / 2 < n)
            left = mid + 1;
        else
            return i + mid - 1;
        //cout << mid << endl;
        //cout << left <<"   "<<right<< endl;
        //getchar();
        //cout << "MID :" << mid << endl;
    }
    //cout << "left: " << left << endl;
    return 0;
}
int main()
{
    long long n;
    long long ans1, ans2;
    cin >> n;
    for (long long i = 1; i <= n; ++i) {
        ans1 = i;
        if (i == n) {
            ans2 = i;
            break;
        }
        if (ans2 = check(i, n))break;
    }
    cout << ans1 << " " << ans2;
    while (1);
    return 0;
}
#endif

#if 0

#include<bits/stdc++.h>
using namespace std;

/******************************************/
int n;
string g_str[3];
int vis[100];

/******************************************/

/************************/
struct DATA {
    int length;
    int value;
}INF[3];
/**********************/
void point() {
    for (char ch = 'A'; ch <= 'Z'; ++ch) {
        //if (!vis[ch])break;
        cout << vis[ch] << " ";
    }
}
void InitInf() {
    for (int i = 0; i < 3; ++i) {
        INF[i].length = g_str[i].size();
    }
};
void dfs(int i, int carry) {
    point();
    cout << endl;
    getchar();
    if (INF[0].length == 0 && INF[1].length == 0 && INF[2].length == 0) {
        point();
        exit(0);
    }
    INF[i].value = g_str[i][INF[i].length - 1];
    if (INF[i].length)
        INF[i].length--;
    else {
        INF[i].value = 0;
        dfs(i + 1, carry);
        return ;
    }
    if (i == 2) {
        //判断 //是否 有   --》 若是 没有那么 接匹配一个 数 递归
        if (vis[INF[i].value]) {
            if ((vis[INF[i].value] + vis[INF[i].value + carry]) % n == vis[INF[i].value])
                dfs(0, (vis[INF[i].value] + vis[INF[i].value + carry]) >= n);
            else
                return;
        }
        else {
            vis[INF[i].value] = (vis[INF[i].value] + vis[INF[i].value + carry]) % n;
            dfs(0, (vis[INF[i].value] + vis[INF[i].value + carry]) >= n);
            vis[INF[i].value] = 0;
        }
    }
    else {           //(// 计算 过) dfs(i+1)  //未计算过 的 for(int i=1;i<9;++i) dfs()
        if (INF[i].value&&vis[INF[i].value]) {
            dfs(i + 1, carry);
        }
        else{
            for (int j = 1; j < n; ++j) {
                cout << INF[i].value << endl;
                vis[INF[i].value] = j;
                dfs(i + 1, carry);
                vis[INF[i].value] = 0;
            }
        }
    }
}
int main()
{
    cin >> n;
    for (int i = 0; i < 3; cin >> g_str[i++]);
    InitInf();
    cout <<"over!!!"<< endl;
    dfs(0, 0);
    return 0;
}

#endif

#include<bits/stdc++.h>
using namespace std;

/******************************************/
int n;
string g_str[3];
int vis[100];

/******************************************/

/************************/
struct DATA {
    int length;
    int value;
}initInf[3];
/**********************/
void point() {
    for (char ch = 'A'; ch <= 'Z'; ++ch) {
        if (!vis[ch])break;
        cout << vis[ch] << " ";
    }
}
void InitInf() {
    for (int i = 65; i<66 + n; vis[i++] = -1);
    for (int i = 0; i < 3; ++i) {
        initInf[i].length = g_str[i].size()-1;
    }
};
void dfs(int i, int carry,int length) {

    if (length==-1) {
        point();
        exit(0);
    }
    if (i == 2) {
        //判断 //是否 有   --》 若是 没有那么 接匹配一个 数 递归
        if (vis[g_str[length]]!=-1) {
            if ((vis[g_str[0][length]+vis[g_str[length]]+carry)%n==vis[g_str[length]]) {
                dfs(0, (vis[g_str[0][length] + vis[g_str[length]])>=n,length-1);
            }
            else
                return;
        }
        else {
            vis[g_str[length]] = (vis[g_str[0][length] + vis[g_str[length]] + carry) % n;
            dfs(0, (vis[g_str[0][length] + vis[g_str[length]] + carry) % n, length - 1);;
            vis[g_str[length] = -1;
        }
    }
    else {           //(// 计算 过) dfs(i+1)  //未计算过 的 for(int i=1;i<9;++i) dfs()
        if (INF[i].value&&vis[INF[i].value] != -1) {
            dfs(i + 1, carry,INF);
        }
        else {
            for (int j = 0; j < n; ++j) {
                vis[INF[i].value] = j;
                dfs(i + 1, carry,INF);
                INF[i].length++;
                vis[INF[i].value] = -1;
            }
        }
    }
}
int main()
{
    cin >> n;
    for (int i = 0; i < 3; cin >> g_str[i++]);
    InitInf();
    cout << "over!!!" << endl;
    dfs(0, 0,initInf);
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int getNum(long long n){
    int count =0,i;
    if(n%2)
        for(i=1;i*i<=n;i+=2){
            if(n%i==0)
                count+=2;
        }
    else
        for(i=1;i*i<=n;++i)
            if(n%i==0)
                count+=2;
    int flag=n%2?2:1;
    if((i-flag)*(i-flag)==n)count-=1;
    return count;
}
int main() {
    for(int i=1;i<20;++i){
        cout<<i<<endl;
        cout<<getNum(i)<<endl;
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+10;
int s[maxn];
inline int read(){
    int x=0,w=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return w?-x:x;
}
inline int left_ch(int x){
    return x<<1;
}
inline int right_ch(int x){
    return x<<1|1;
}
struct Tree{
    int l,r,sum,lazy;
    void update(int x){
        sum+=(r-l+1)*x;
        lazy+=x;
    }
}tree[maxn<<2];

void push_up(int x){
    tree[x].sum=tree[left_ch(x)].sum+tree[right_ch(x)].sum;
}
void push_down(int x){
    int lazyval=tree[x].lazy;
    if(lazyval){
        tree[left_ch(x)].update(lazyval);
        tree[right_ch(x)].update(lazyval);
        tree[x].lazy=0;
    }
}
#if 1
void build(int x,int l,int r){
    tree[x].l=l,tree[x].r=r;
    tree[x].sum=tree[x].lazy=0;
    if(l==r)
        tree[x].sum=0;
    else{
        int mid=(l+r)>>1;           //二分 
        build(x<<1,l,mid);
        build(x<<1|1,mid+1,r);
        push_down(x);
    }
}
#endif 
void update(int x,int l,int r,int val){
    if(tree[x].l>=l&&tree[x].r<=r)
        tree[x].update(val);
    else{
        int mid=(tree[x].l+tree[x].r)>>1;
        push_down(x);
        if(mid>=l)update(x<<1,l,r,val);
        if(mid<=r)update(x<<1|1,l,r,val);
        push_up(x);
    }
}
int query(int x,int l,int r){
    if(tree[x].l>=l&&tree[x].r<=r)
        return tree[x].sum;
    else{
        int ans=0,mid=(tree[x].l+tree[x].r)>>1;
        push_down(x);
        if(mid>=l)ans+=query(x<<1,l,r);
        if(mid<=r)ans+=query(x<<1|1,l,r);
        push_up(x);
        return ans;
    }
}
int main(){
    ios::sync_with_stdio(false);
    int n,m,t_index,t_val;
    n=read(),m=read();
    build(1,1,maxn-100);
    int maxL;
    for(int i=1;i<=n;++i){
        t_index=read(),t_val=read();
        update(1,t_index,t_index+1,t_val);
        maxL=max(maxL,t_index);
    }
    int ans=0;
    cout<<maxL<<endl;
    for(int i=m;i<=maxL;++i)
        ans=max(ans,query(1,i,i-m));
    cout<<ans;
    return 0;
}

---------------------------------------------------------------------

#include<bits/stdc++.h>
using namespace std;
const long long mod =1926081719260817;
const int maxn=1e3+5;
struct Inf{
    int n,m;
}data_list[maxn];
long long sum[maxn][maxn],c[maxn][maxn];
int max_n;
void initData(){
    c[1][1]=c[1][0]=1;
    for(int i=2;i<=max_n;c[i++][0]=1)
        for(int j=1;j<=i;++j)
            c[i][j]=(c[i-1][j-1]+c[i-1][j]);
    for(int i=1;i<=max_n;++i)%mod
        for(int j=1;j<=max_n;++j)
            sum[i][j]=(sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+c[i][j]+mod)%mod;
}
int main(){
    int n;
    //ios::sync_with_stdio(false);
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>data_list[i].m>>data_list[i].n;
        max_n=max(max_n,data_list[i].n);
    }max_n+=2;
    initData();
    for(int i=0;i<n;++i){
        cout<<sum[data_list[i].n][data_list[i].m]<<endl;
    }
    return 0;
}
分考场

//分考场
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
inline int read(){
    int w=0,x=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return w?-x:x;
}
const int maxn=1e2+3;
int ans=1000,n,m;
int G[maxn][maxn],ClassInf[maxn][maxn],Pos[maxn];
bool check(int n,int k){
    for(int i=1;i<=Pos[k];++i)
        if(G[n][ClassInf[k][i]])
            return false;
    return true;
}

void dfs(int num,int k){            //编号 and 考场的个数
    if(k>=ans)return;
    if(num>n){
        ans=min(ans,k);
        return;
    }
    //枚举考场 
    for(int i=1;i<=k;++i){
        if(check(num,i)){
            ClassInf[i][++Pos[i]]=n;
            dfs(num+1,k);
            ClassInf[i][--Pos[i]]=0;
        }
    }
    ClassInf[k+1][++Pos[k+1]]=num;
    dfs(num+1,k+1);
    --Pos[k+1];
}
int main(){
   // ios::sync_with_stdio(false);
    n=read(),m=read();
    int t1,t2;
    while(m--){
        t1=read(),t2=read();
        G[t1][t2]=G[t2][t1]=1;
    }
    dfs(1,0);
    printf("%d",ans);
    return 0;
}

............................................小朋友排队、、、、、、、、、、

#include<iostream>
#include<vector>
using namespace std;

const int maxn=1e4+4;

inline int read(){
    int w=0,x=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return w?-x:x;
}

class BinTree:vector<int>{
public :
    BinTree(int x=0){
        assign(x+1,0);
    }
    int lowbit(int x){
        return -x&x;
    }
    void Add(int pos,int val){
        if(pos>size()-1)return ;
        (*this)[pos]+=val;
        Add(pos+lowbit(pos),val);
    }
    int Sum(int x){
        return x>0?Sum(x-lowbit(x))+(*this)[x]:0;
    }
};
int stu[maxn],vis[maxn],ans;
int main(){
    int n=read(),ans=0;
    BinTree BT(n),NewBT(n);
    int * cur=new int[n];
    memset(cur,0,sizeof(cur));
    for(int i=1;i<=n;++i){
        cur[i]=cur[i-1]+i;
    }
    for(int i=1;i<=n;++i){
        stu[i]=read();
        BT.Add(stu[i],1);
        vis[i]=i-BT.Sum(stu[i]);
    }
    for(int i=n;i>=1;--i){
        BT.Add(stu[i],1);
        vis[i]+=BT.Sum(stu[i]);
    }
    for(int i=1;i<=n;++i){
        ans+=cur[stu[i]];
    }
    cout<<ans-1;
    while(1);
    return 0;
}