Summer training #3
A:给一个包含字母 加号 括号的序列 要求你删除多余的括号然后输出 (待改)
#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
char s[];
int final[],visit[];
stack<int> stack1,stack2;
bool check()
{
int pop=;
if(stack1.top()==)
pop=;
if(stack2.top()==)
pop=;
if(s[stack1.top()-]=='+'||s[stack1.top()-]=='(')
pop=;
return pop;
}
bool same()
{
return s[stack1.top()-]=='(';
}
int main()
{
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
while(scanf("%s",s)==)
{
//cout << s<<endl;
int cnt=;
mem(final,);
mem(visit,);
int len=strlen(s);
for(int i=;i<len;i++)
{
if(s[i]=='(')
{
stack1.push(i);
stack2.push();
}
else if(s[i]=='+')
{
if(!stack2.empty())
{
stack2.pop();
stack2.push();
}
}
else if(s[i]==')')
{
//cnt++;
//cout << cnt<<" "<<stack1.size()<<endl;
if((!check())&&i<=len-||s[i+]==')'||s[i+]=='+')
{
final[i]=;
final[stack1.top()]=;
//cout << stack1.top()<<endl;
if(stack1.top()==&&i+<len&&same&&s[i+]==')')
{
int t1=stack1.top();
stack1.pop();
int t2=stack1.top();
stack1.pop();
t2=t1;
stack1.push(t2);
stack1.push(t1);
}
}
stack1.pop();
//cout << cnt<<" "<<stack1.size()<<endl;
}
}
/*for(int i=len-1;i>=0;i--)
{
if(s[i]=='(')
{
final[i]=0;
break;
}
}*/
for(int i=;i<len;i++)
{
if(final[i])
printf("%c",s[i]);
}
cout<<endl;
}
return ;
}
B:
C:给你一个l r要求在这之间找出两个数使之按位或后的值最大
因为是或 所以最大的那个数肯定是r 另外一个在l,r之间找 1<<i-(1<<i-now)<=r-1-l
#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
int er[];
ll l,r;
int pop=;
ll anser1=;
void init(ll t)
{
while(t>)
{
er[pop++]=t%;
t=t/;
}
}
void doit()
{
for(int i=;i<pop;i++)
{
if(er[i]==)
anser1+=1LL<<i;
}
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int t;
cin>>t;
while(t--)
{
cin >> l >> r;
anser1=,pop=;
init(r);
for(int i=;i<pop;i++)
{
if(er[i]==)
anser1+=1LL<<i;
else
{
if(r->=l+anser1)
er[i]=;
}
}
anser1=;
doit();
cout << anser1<<endl;
}
return ;
}
D:
I:素因子分解+容斥原理
假设卡片上标号分别是a1, a2, ..., an, M,跳蚤跳对应号的次数分别为x1, x2, ..., xn,跳M个单位长度的次数是xn+1,那么要满足已知条件只需满足方程:
a1x1+a2x2+...+anxn+Mxn+1 = 1 有解,即:
gcd (a1, a2, ..., an, M) = 1,接下来对M进行素因子分解,然后排除公因子非1的情况即可。
如代码所示:
设g为公因子非1的情况数,f(i)表示有i个公因子的情况数,由容斥原理得:g = f(1) - f(2) + f(3) -... f(k)
#include <iostream>
using namespace std;
#define LL __int64 int fac[], k, a[], n, m, x;
LL tp; LL my_pow (LL a, int b) //计算a^b
{
LL res = ;
while (b--) res *= a;
return res;
} void dfs (int pos, int cnt, int num) //dfs得到卡片中n+1个数有num个公因子时的方法数
{
if (cnt == num)
{
x = m;
for (int i = ; i < cnt; i++)
x /= a[i]; //x/p表示[1,x]中有多少个数是p的倍数
tp += my_pow (x, n); //要选n个数,每个数有x种选择
return ;
}
for (int i = pos; i < k; i++)
{
a[cnt] = fac[i];
dfs (i+, cnt+, num);
}
} void divide (int p) //分解素因子,fac存放p的所有素因子
{
for (int i = ; i * i <= p; i++)
{
if (p % i == )
{
fac[k++] = i;
p /= i;
while (p % i == )
p /= i;
}
}
if (p > ) fac[k++] = p;
} int main()
{
LL ans, g;
int i;
while (cin >> n >> m)
{
g = ;
divide (m);
for (i = ; i <= k; i++) //g = f(1)-f(2)+f(3)-f(4)+...f(k)
{
tp = ;
dfs (, , i);
if (i & ) g += tp;
else g -= tp;
}
ans = my_pow (m, n) - g; //ans = m^n - g
cout << ans << endl;
}
return ;
}
K:博弈论 2*3 3*2 2*2 是N 1*n n*1 是P
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int dp[][];
int getsg(int w,int h){
if(dp[w][h]!=-)return dp[w][h];
bool vis[];
memset(vis,,sizeof(vis));
for(int i=;i<=w-i;i++){
dp[i][h]=getsg(i,h);
dp[w-i][h]=getsg(w-i,h);
vis[dp[i][h]^dp[w-i][h]]=true;
}
for(int i=;i<=h-i;i++){
dp[w][i]=getsg(w,i);
dp[w][h-i]=getsg(w,h-i);
vis[dp[w][i]^dp[w][h-i]]=true;
}
for(int i=;;i++)
if(!vis[i])
return dp[w][h]=i;
}
int main()
{
int w,h;
memset(dp,-,sizeof(dp));
while(scanf("%d%d",&w,&h)!=EOF){
if(getsg(w,h))printf("WIN\n");
else printf("LOSE\n");
}
return ;
}
Summer training #3的更多相关文章
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2016 Multi-University Training Contests
2016 Multi-University Training Contest 1 2016 Multi-University Training Contest 2 2016 Multi-Univers ...
- 2016 Multi-University Training Contest 2 D. Differencia
Differencia Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 2016 Multi-University Training Contest 1 G. Rigid Frameworks
Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C
Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/C Description standard input/output After ...
- 2012 Multi-University Training Contest 9 / hdu4389
2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...
- 2014 Multi-University Training Contest 9#11
2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others) ...
- 2014 Multi-University Training Contest 9#6
2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...
- 2016 Multi-University Training Contest 1
8/11 2016 Multi-University Training Contest 1 官方题解 老年选手历险记 最小生成树+线性期望 A Abandoned country(BH) 题意: 1. ...
随机推荐
- 用maven建立一个工程
建立java工程 mvn archetype:generate -DgroupId=cn.maxhou.demo -DartifactId=myapp -DarchetypeArtifactId=ma ...
- SpringMvc框架 解决在RESTFUL接口后加任意 “.xxx” 绕过权限的问题
问题描述: 框架使用的是SpringMVC.SpringSecurity,在做权限拦截的时候发现一个问题,假设对请求路径/user/detail进行了权限拦截,在访问/user/detail.abc的 ...
- octave
1. octave, 如何求一元二次方程的解: 例如:· -3x-9y=18 · 4x+3y=12 命令: >>> A=[-3 -9; 4 3]; B=[18;12]; &g ...
- 非阻塞IO可以等同异步IO嘛?
脑壳短路的一瞬间,黑人问号? 在这个问题之前,我们先了解下IO的过程,下图是异步IO,做个参照(图片随便找的,侵权联系小弟删除) 简单叙述下windows同步IO的流程(图片描述的是异步IO) 1.调 ...
- [转帖]兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍
兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍 2019-06-20 09:56:38作者:linux人稿源:快科技 https://ywnz.com/linu ...
- LINK : fatal error LNK1104: cannot open file的解决方法
结果是编译时通过了,但连接(F7)时却显示: LINK : fatal error LNK1104: cannot open file“Debug/1.exe” ============== 上一次运 ...
- SafeArrayGetUBound(EveryPatientInfo.parray,1,&UBound);
SafeArray在ADO编程中经常使用,它的主要目的是用于automation中的数组型参数的传递.因为在网络环境中,数组是不能直接传递的,而必须将其包装成Safe Array.实质上Safe Ar ...
- linux常用终端命令(一)终端命令格式(二)文件和目录常用命令
一.linux终端命令格式 1.终端命令格式 command [-options] [parameter] 说明: command :命令名,相应功能的英文单词或单词的缩写 [-options] ...
- 怎样理解Node接口 / ParentNode接口 / ChildNode接口
ParentNode 和 ChildNode可以理解为是Node的子集, 它对一些具有父节点或子节点的节点提供了一些额外的方法和属性, 比如: 1. 继承了ParentNode的接口有: 元素节点 / ...
- ASP.NET Core如何限制请求频率
原文:ASP.NET Core如何限制请求频率 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.ne ...