B. Modular Equations
题意:给一对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; }
C. Treasure
题意: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;