2019.7acm集训 第一周

HDU 1425 sort

#include 
#include
using namespace std;
const int N = 1e6 + 5;
int a[N];
int main(){
	int n,m;
	while(~scanf("%d%d",&n,&m)){
		for(int i=0;i=n-m;j--){
		if(j == n-m)printf("%d\n",a[j]);
		else printf("%d ",a[j]);
	}	
	}
}

//通过STL库自带的sort()函数进行对数组的快排

POJ 1012 Joseph

#include
using namespace std;
int main(){
	int n,a[15] = { 0, 2, 7, 5, 30, 169, 441, 1872, 7632, 1740, 93313, 459901, 1358657, 2504881 };
	while(cin>>n){
		if(n==0)return 0;
		else cout<

//新天地,在题目例子有穷的情况下可提前算出答案,再用数组输出

HDU 1061 Rightmost Digit

#include
using namespace std;
int main(){
	int n;
//	cin>>n;
	scanf("%d",&n);
	while(n--){
		long a,b;
		scanf("%ld",&a);a=a%100;b=a;
		for(long i=0;i

//由于题目规定输入的N有(1,1000000000),所以要用的long类型来储存,又因最右位的数只与所乘数的最右位有关,所以为了节省时间也为了防止TL,在得到a的时候,都要把a%100。讲道理可以用%10的吧,不过不知道怎么就WA了,就先用%100了,日后再去研究。

UVA 10082 WERTYU
思路:因题目要求都是往前错了一位,所以可以用数组按顺序保存键盘上的字符,当接收到 这个字符 时,就输出后一个字符。

#include
#include
int main()
{
int i,n;
char ch;
char s[]="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; 
n=strlen(s);
while(scanf("%c",&ch)==1)
{
for(i=0;s[i]!=ch&&i

UVA 1225 Digit Counting
思路:用新学的stringstream方法,把从循环中得出的数字 先转化为字符串,用字符串长度做循环的上限,把每个字符s[i]提取出来后再转化为数字,使a[s[i]]++;
最后遍历输出 a数组;

#include
#include
#include 
using namespace std;
int main(){
	int n;
	cin>>n;
	while(n--){
		int length,m,p,a[10]={0,0};
		stringstream stream;
		string result;
		cin>>m;
		for(int i=1;i<=m;i++){
			    stream << i; //将int输入流
			    stream >> result; //从stream中抽取前面插入的int值
				length=result.length();
				stream.clear();
			for(int j=0;j<=length;j++){			
				if(result[j]>='0' && result[j]<='9')
					{stream<>p;
					 stream.clear();
					 a[p]++;}
			}
		} 	
		cout<

UVA 10340 All in All
思路:双重循环

#include
#include
#define M 100000
int main()
{
	char ch1[M+1],ch2[M+1];
	while(~scanf("%s %s",ch1,ch2))
	{
		int len1,len2,i,j,k;
		len1=strlen(ch1);
		len2=strlen(ch2);
		k=j=0;
		for(i=0;i

UVA 489 Hangman Judge
//侩子手,先将两个字符串排序,并将重复的字符清除一个,设定len为总共需要对的数,用str.find(str[i])确定 该值是否在str中
//sort 排序 string
sort(str.begin(),str.end());

#include
using namespace std;

int main(){
	
	int ss,test=-1;
	while(cin>>ss && ss!=test){

		string s1,s2;
		cin>>s1>>s2;
		int len2 = s2.length(),len1 = s1.length(),len=len1,f=0,t=0;
		sort(s1.begin(),s1.end());
		for(int j=0;j= 0) && (find < len1)){
				t++;
			}
			else f++;
		cout<<"find="<

UVA 133 The Dole Queue
先设置一个各项均为1的数组,代表人还活着,while(n–)表示总共至少该运行几次,
k=k0; for(int i=0;in1){k1=1; } } else{k1++;if(k1>n1){k1=1; } } // cout<<"k1 "<
用两次循环的方式,遍历数组每个活着的人,记录他们的坐标k1,k2,到最后在将他们变为0,防止两数重合时产生错误。
UVA 253 涂色子 Cube painting
思路:题目的input按图的要求输入字符串,用erase函数截成s1,s2并swap1,5的值,保持每两个元素对应着相对的面,双重循环,若有两个面相同,则取出两个对面代表的四个元素,直到循环结束,若s1.length()==0,那么TRUE,else,FALSE

#include
using namespace std;
int main(){
	string s;
	while(cin>>s){
		string s1,s2;
		s1=s;s2=s;
		s1.erase(6,6);
		s2.erase(0,6);
		swap(s1[1],s1[5]);
		swap(s2[1],s2[5]);
//		cout<

你可能感兴趣的:(19暑假集训——记)