临时代码 库
方格取数::::
//思路分析 :
得到 两个 路径 算出最大值 :
#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;
}