Codeforces Round #617 (Div. 3)
题意:你可以更换两个数,要求和是奇数
思路:判断数组里是否有奇数,没有奇数或者数组全是奇数且数组个数为偶数时为NO
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int INF=0x3ffff; 5 const int maxn=2e4; 6 int main() 7 { 8 int T; 9 scanf("%d",&T); 10 while(T--) 11 { 12 int n; 13 scanf("%d",&n); 14 int a; 15 int sum=0; 16 bool flag=false; 17 for(int i=0;i<n;i++) 18 { 19 scanf("%d",&a); 20 if(a%2!=0) 21 { 22 flag=true; 23 sum++; 24 } 25 } 26 if(!flag||(sum==n&&n%2==0)) 27 printf("NO\n"); 28 else 29 printf("YES\n"); 30 } 31 return 0; 32 }
题意:你有一些钱,花费10元就可以返还一元,且一元也可以用掉,问你花最多多少钱
思路:循环/10,%10,把除以10的加上模10的,原来的钱加上每次除以10后的钱就行了,因为返还后的钱都可以用
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int INF=0x3ffff; 5 const int maxn=2e4; 6 int main() 7 { 8 int T; 9 scanf("%d",&T); 10 while(T--) 11 { 12 ll a; 13 cin>>a; 14 ll sum=a; 15 while(a/10!=0) 16 { 17 ll chu=a/10; 18 ll mo=a%10; 19 a=chu+mo; 20 sum+=chu; 21 } 22 cout<<sum<<endl; 23 } 24 return 0; 25 }
题意:给你字符串所组成的路径,可以删除里面的子串,从而终点不变,且删除的长度尽可能小
思路:用map来记录坐标,find来查找当前点有没有走过,没走的话,当前点的值为i+1(就是位置),走过的话,比较i-mp[now](其实就是之前走的位置的值)与INF的大小,只要小就更新,否则继续走
1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int INF = 0x3ffff; 5 int main(){ 6 int T; 7 scanf("%d",&T); 8 while(T--) 9 { 10 int n; 11 scanf("%d",&n); 12 string s; 13 cin>>s; 14 int xx=0,yy=0; 15 int len=INF; 16 map<pair<int,int>,int>mp; 17 mp[{xx,yy}]=0; 18 int l=0,r=0; 19 for(int i=0;i<n;i++) 20 { 21 if(s[i]=='L')xx--; 22 else if(s[i]=='R')xx++; 23 else if(s[i]=='U')yy++; 24 else yy--; 25 pair<int,int>now={xx,yy}; 26 if(mp.find(now)!=mp.end()) 27 { 28 if(i-mp[now]<len) 29 { 30 len=i-mp[now]; 31 l=mp[now]; 32 r=i+1; 33 } 34 } 35 mp[now]=i+1; 36 } 37 if(len>n) 38 printf("-1\n"); 39 else 40 printf("%d %d\n",l+1,r); 41 } 42 return 0; 43 }