题意:给一对a、b (0<a,b<10^9); 求满足 a mod x =b 的x有多少,若无限则print "infinity" (without the quotes)。
题解:a这么大,优化地枚举吧;由于a-b=i*x ,看来枚举到sqrt(a-b)就够了;
这题做记录只想对自己说:你敢有多粗心,系统就敢有多少罚时!!!
#define INF 0x7fffffff
#define eps (1e-9)
#define mid 250
#define maxn 1000000000
#define clearto(s,x) memset(s,x,sizeof(s))
using namespace std;
int n, m, tot=0;
int main()
{
//freopen("E:\DATA.txt","r",stdin);
//int TT=1,tt+=1; scanf("%d",&TT);
int i=0,j=0,s=0,t=0;
int a,b;
scanf("%d%d",&a,&b);
int ans=0;
if(a==b) { printf("infinity"); return 0; }
if(a==0||a< b) { printf("0"); return 0; } // a==0 真的是很特殊情况啊
n= a-b; m=sqrt(a-b);
for(i=1;i<=m;i++){
if(n%i) continue;
if(i> b) ans++;
if((n/i >b)&&(i*i!=n)) ans++;
}
printf("%d",ans);
return 0;
}
题意:There was a string s written on the door consisting of characters '(', ')' and '#'. 用一个或多个‘)’代替‘#’ 使得S是beautiful;就是最终左右括号个数相等,且从左往右任何时候')'不超过'('数量。
就感慨一下 挖掘题目中的性质真是太重要了;就我那一开始就傻瓜式的模拟,作死;
题解:如果能替换成功,则可以前面#多于1的替换都放到最后一个# ;运用这性质随便替换一下,再随随便检查一下就OK了。
#define INF 0x7fffffff
#define eps (1e-9)
#define lenq 2<<16
#define maxn 199999999
#define clearto(s,x) memset(s,x,sizeof(s))
using namespace std;
int n, m, tot=0;
int val[100005];
char dic[100005];
int main()
{
//freopen("E:\DATA.txt","r",stdin);
//int TT=1,tt=1; scanf("%d",&TT);
int i=0,j=0,k=0,t=0; clearto(val,0);
scanf("%s",dic);
int len=strlen(dic);
int sum=0,id=0;
for(i=0;i<len;i++) //先找找缺多少个‘)’和最后一个#位置
{
if(dic[i]=='(') { val[i]= 1; sum++; }
if(dic[i]==')') { val[i]=-1; sum--; }
if(dic[i]=='#') {
val[i]=-1; id=max(id,i); sum--; tot++;
}
}
if(sum<0) { printf("-1"); return 0; }
val[id]=val[id]-sum; sum=0;
for(i=0;i<len;i++) // 完了检查一下
{
sum=sum+val[i];
if(sum<0) { printf("-1"); return 0; }
}
for(i=1;i<=tot;i++){
if(i!=tot) printf("1\n");
else printf("%d",-val[id]);
}
return 0;